Zend Framework - модели и база данных
В этой главе мы обсудим различные модели и базу данных Zend Framework.
Модели в Zend Framework
Модель определяет логическое представление данных приложения. Например, в приложении корзины покупок - Product, Customer, Cart и Orders являются моделями. Они определяют свойства удерживаемой сущности. Некоторые из концепций моделей следующие:
Контроллеры общаются с моделями и просят их получить необходимую информацию. Эта полученная информация затем передается контроллером в представление. Наконец, View будет отображать модель как потребляемые пользователем презентационные данные.
Очень редко модель напрямую взаимодействует с представлением, но иногда это может случиться.
Модели могут разговаривать друг с другом и не замкнуты. У них отношения друг с другом. Эти отношения упрощают и ускоряют получение информации контроллером, поскольку ему не нужно взаимодействовать с разными моделями; модели могут сделать это сами.
Давайте посмотрим на простую модель - MyModel
<?php
namespace Tutorial\Model;
class Book {
public $id; public $author;
public $title;
}
База данных в Zend Framework
Zend framework предоставляет простой и многофункциональный класс Zend \ Db \ TableGateway \ TableGateway для поиска, вставки, обновления и удаления данных из таблицы базы данных.
Давайте посмотрим, как подключить MySqlservice через драйвер PHP PDO в Zend framework, выполнив следующие шаги.
Шаг 1. Создайте базу данных в MySQL
Создать базу данных tutorialsна локальном сервере MySQL. Мы можем использоватьphpmyadminили любые другие инструменты MySQL GUI для этой цели. Давайте использоватьMySQL clientв командной строке. Подключитесь к серверу mysql и выполните следующую команду, чтобы создатьtutorial база данных.
create database tutorials
Шаг 2: Создайте таблицу в учебной базе данных
Давайте теперь создадим базу данных book в tutorials db, используя следующую команду SQL.
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: Обновите Tutorial Controller
Это делается путем соблюдения следующих трех шагов.
- Добавить конструктор с 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.