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에서 테이블 만들기
이제 데이터베이스를 생성하겠습니다. book 에 tutorials 다음 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.