В этой главе мы обсудим различные модели и базу данных 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 .