Zend 프레임 워크-모델 및 데이터베이스

이 장에서는 Zend Framework의 다양한 모델과 데이터베이스에 대해 설명합니다.

Zend Framework의 모델

모델은 애플리케이션의 논리적 데이터 표현을 정의합니다. 예를 들어 쇼핑 카트 애플리케이션에서 제품, 고객, 카트 및 주문은 모델입니다. 보유하고있는 엔티티의 속성을 정의합니다. 모델의 개념 중 일부는 다음과 같습니다.

  • 컨트롤러는 모델과 통신하고 필요한 정보를 검색하도록 요청합니다. 이 검색된 정보는 컨트롤러에 의해 뷰로 전달됩니다. 마지막으로 View는 모델을 사용자 소비 가능한 프리젠 테이션 데이터로 렌더링합니다.

  • 모델이 뷰와 직접 상호 작용하는 경우는 매우 드물지만 때때로 발생할 수 있습니다.

  • 모델은 서로 대화 할 수 있으며 독립적이지 않습니다. 그들은 서로 관계가 있습니다. 이러한 관계는 다른 모델과 상호 작용할 필요가 없기 때문에 컨트롤러가 정보를 더 쉽고 빠르게 얻을 수 있도록합니다. 모델이 스스로 할 수 있습니다.

간단한 모델을 살펴 보겠습니다. MyModel

<?php  
namespace Tutorial\Model;  
class Book { 
   public $id; public $author; 
   public $title; 
}

Zend Framework의 데이터베이스

Zend 프레임 워크는 간단하고 기능이 풍부한 클래스 인 Zend \ Db \ TableGateway \ TableGateway를 제공하여 데이터베이스 테이블에서 데이터를 찾고, 삽입하고, 업데이트하고, 삭제할 수 있습니다.

연결하는 방법을 보자 MySqlservice Zend 프레임 워크에서 PHP의 PDO 드라이버를 통해 다음 단계를 수행합니다.

1 단계 : MySQL에서 데이터베이스 생성

데이터베이스 생성 tutorials로컬 MySQL 서버에서. 우리는 사용할 수 있습니다phpmyadmin또는이 목적을위한 다른 MySQL GUI 도구. 사용하자MySQL client명령 프롬프트에서. mysql 서버에 연결하고 다음 명령을 실행하여tutorial 데이터 베이스.

create database tutorials

2 단계 : 자습서 DB에서 테이블 만들기

이제 데이터베이스를 생성하겠습니다. booktutorials 다음 SQL 명령을 사용하여 db.

use tutorials;  
CREATE TABLE book ( 
   id int(11) NOT NULL auto_increment, 
   author varchar(100) NOT NULL, 
   title varchar(100) NOT NULL, 
   PRIMARY KEY (id) 
);

3 단계 : 책 테이블에서 데이터 채우기

채우기 book샘플 데이터가있는 테이블. 다음 SQL 명령을 사용하십시오.

INSERT INTO book (author, title) VALUES ('Dennis Ritchie', 'C Programming'); 
INSERT INTO book (author, title) VALUES ('James gosling', 'Java Programming'); 
INSERT INTO book (author, title) VALUES ('Rasmus Lerdorf', 'Programming PHP');

4 단계 : 데이터베이스 연결 업데이트

글로벌 구성 파일 (myapp / config / autoload / global.php)을 필요한 데이터베이스 드라이브 정보로 업데이트하십시오.

<?php 
return array( 
   'db' => array( 
      'driver' => 'Pdo', 
      'dsn' => 'mysql:dbname = tutorials;host = localhost', 
      'driver_options' => array( 
         PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
      ), 
   ), 
   'service_manager' => array( 
      'factories' => array(  
         'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
      ), 
   ), 
);

5 단계 : 데이터베이스 자격 증명 업데이트

로컬 구성 파일 (myapp / config / autoload / local.php)에서 데이터베이스 자격 증명을 업데이트합니다. 이러한 방식으로 로컬 및 라이브 데이터베이스 연결 자격 증명을 분리 할 수 ​​있습니다.

<?php 
return array( 
   'db' => array( 
      'username' => '<user_name>', 
      'password' => '<password>', 
   ), 
);

6 단계 : 도서 용 모델 생성

모델을 만들어 보겠습니다. Book 우리 모듈에서 src예배 규칙서. 일반적으로 모델은 Model 폴더 (/myapp/module/Tutorial/src/Model/Book.php) 아래에 그룹화됩니다.

<?php  
namespace Tutorial\Model;  
class Book { 
   public $id; 
   public $author; public $title; 
}

7 단계 : 책 모델에서 exchangeArray 구현

그만큼 TableGateway 통해 모델과 상호 작용 exchangeArray함수. exchangeArray 함수의 표준 인수는 PHP 배열로 저장된 데이터베이스 결과 집합입니다. 사용exchangeArrayfunction, 모델의 속성을 해당 데이터베이스 테이블과 쉽게 동기화 할 수 있습니다.

모델 업데이트, Book 아래와 같이-

<?php  
namespace Tutorial\Model;  
class Book { 
   public $id; public $author; 
   public $title; public function exchangeArray($data) { 
      $this->id = (!empty($data['id'])) ? $data['id'] : null; $this->Author = (!empty($data['author'])) ? $data['author'] : null; 
      $this->Title = (!empty($data['title'])) ? $data['title'] : null; 
   } 
}

8 단계 : TableGateway를 사용하여 책 가져 오기

수업을 만들고, BookTable데이터베이스에서 책 정보를 가져옵니다. 클래스, BookTable을 만듭니다.Model 폴더 자체.

<?php  
namespace Tutorial\Model;  
use Zend\Db\TableGateway\TableGatewayInterface;  
class BookTable {
   protected $tableGateway; 
   public function __construct(TableGatewayInterface $tableGateway) { $this->tableGateway = $tableGateway; } public function fetchAll() { $resultSet = $this->tableGateway->select(); return $resultSet; 
   } 
}

우리는 사용했습니다 select()TableGateway 클래스의 메서드를 사용하여 데이터베이스에서 책 정보를 가져옵니다. 그러나 우리는 표에 대한 어떤 참조도 사용하지 않았습니다.book코드에서. TableGateway는 본질적으로 일반적이며 특정 구성을 사용하여 모든 테이블에서 데이터를 가져올 수 있습니다. 일반적으로 이러한 구성은module.config.php 다음 단계에서 논의 할 파일입니다.

9 단계 : BookTable 클래스 구성

튜토리얼 모듈을 업데이트합니다. Module.php 와 더불어 getServiceConfig() 방법.

<?php
namespace Tutorial;
use Zend\Db\Adapter\AdapterInterface;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements ConfigProviderInterface {
   
   public function getConfig() {
      return include __DIR__ . '/../config/module.config.php';
   }
   public function getServiceConfig() {
      return [
         'factories' => [
            Model\BookTable::class => function ($container) { $tableGateway = $container->get(Model\BookTableGateway::class); $table = new Model\BookTable($tableGateway); return $table;
            },
            Model\BookTableGateway::class => function ($container) { $dbAdapter = $container->get(AdapterInterface::class); $resultSetPrototype = new ResultSet();
               $resultSetPrototype->setArrayObjectPrototype(new Model\Book()); return new TableGateway('book', $dbAdapter, null, $resultSetPrototype);
            },
         ],
      ];
   }
}

여기에서 우리는 BookTable서비스 관리자를 사용하는 클래스. BookTable 클래스는 책 정보를 가져 오는 데 사용되며이를 등록하면 필요할 때마다 액세스 할 수 있습니다. 등록 된 서비스는 공유되기 때문에 성능이 향상되고 메모리 사용량이 감소합니다.

또 다른 항목 인 Model \ BookTableGateway :: class는 다음을 위해 특수화 된 TableGateway 개체입니다. Book 모델이며 BookTable.

10 단계 : TutorialController 구성 업데이트

우리는 BookTable가이드 컨트롤러의 서비스를 사용하여 책 정보를 가져옵니다. BookTable 서비스를 가져 오려면 TutorialController에서 생성자 종속성으로 등록하십시오.

이 생성자 종속성은 컨트롤러 자체가 초기화 단계에있는 동안 BookTable 서비스를 가져 오는 데 도움이됩니다. 튜토리얼 모듈 구성의 컨트롤러 섹션을 업데이트합니다.module.config.php 아래 그림과 같이.

'controllers' => [ 
   'factories' => [ 
      Controller\TutorialController::class => function($container) { 
         return new Controller\TutorialController( 
            $container->get(Model\BookTable::class) 
         ); 
      }, 
   ], 
],

11 단계 : 튜토리얼 컨트롤러 업데이트

이것은 다음 세 단계를 준수하여 수행됩니다.

  • BookTable 을 인수로 사용 하여 생성자를 추가합니다 .
private $table;
public function __construct(BookTable $table) { $this->table = $table; 
}
  • 다음을 사용하여 도서 정보를 가져옵니다. BookTable's fetchAll() 메서드를 사용하고 뷰에 등록합니다.

public function indexAction() { 
   $view = new ViewModel([ 
      'data' => $this->table->fetchAll(), ]); return $view; 
}
  • 보기 스크립트에 책 정보를 표시합니다.

<table class = "table"> 
   <tr> 
      <th>Author</th> 
      <th>Title</th> 
      <th> </th> 
   </tr> 
   <?php foreach ($data as $sampledata) : ?> 
   <tr> 
      <td><?php echo $this->escapeHtml($data->author);?></td>  
      <td><?php echo $this->escapeHtml($data->title);?></td> 
   </tr> 
   <?php endforeach ?> 
</table>

12 단계 : 애플리케이션 실행

실행하여 응용 프로그램을 확인하십시오- http://localhost:8080/tutorial.