В этой главе мы обсудим различные модели и базу данных Zend Framework.
Модели в Zend Framework
Модель определяет логическое представление данных приложения. Например, в приложении «корзина» — «Продукт», «Клиент», «Корзина» и «Заказы». Они определяют свойства объекта, который он содержит. Некоторые из концепций моделей следующие:
-
Контроллеры связываются с моделями и просят их получить необходимую им информацию. Эта полученная информация затем передается контроллером в представление. Наконец, View будет отображать модель в качестве потребляемых пользователем презентационных данных.
-
Очень редко модель напрямую взаимодействует с представлением, но иногда это может происходить.
-
Модели могут общаться друг с другом и не являются самодостаточными. У них есть отношения друг с другом. Эти отношения облегчают и ускоряют получение информации контроллером, поскольку он не должен взаимодействовать с различными моделями; модели могут сделать это сами.
Контроллеры связываются с моделями и просят их получить необходимую им информацию. Эта полученная информация затем передается контроллером в представление. Наконец, 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, выполнив следующие шаги.
Шаг 1: Создать базу данных в MySQL
Создавайте учебники по базам данных на локальном сервере MySQL. Для этой цели мы можем использовать phpmyadmin или любые другие инструменты MySQL GUI. Давайте использовать клиент MySQL в командной строке. Подключитесь к серверу mysql и выполните следующую команду, чтобы создать учебную базу данных.
create database tutorials
Шаг 2: Создать таблицу в уроках БД
Давайте теперь создадим книгу базы данных в учебниках 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: Заполните данные в таблице книг
Заполните таблицу книг образцами данных. Используйте следующую команду 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: Создать модель для книги
Давайте создадим модель, книгу в каталоге нашего модуля src . Обычно модели группируются в папке «Модель» — /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. Используя функцию exchangeArray , свойство модели можно легко синхронизировать с соответствующей таблицей базы данных.
Обновите модель, книга, как показано ниже —
<?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 для извлечения информации о книге из базы данных. Но мы не использовали никаких ссылок на таблицу в коде. 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; }
-
Получить информацию о книге, используя метод fetchAll () BookTable, и зарегистрировать ее в представлении.
Получить информацию о книге, используя метод fetchAll () BookTable, и зарегистрировать ее в представлении.
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 .