Zend Framework - Modèles et base de données
Dans ce chapitre, nous discuterons des différents modèles et de la base de données du Zend Framework.
Modèles dans Zend Framework
Un modèle définit la représentation logique des données de l'application. Par exemple, dans une application de panier - Produit, Client, Panier et Commandes sont des modèles. Ils définissent les propriétés de l'entité qu'il détient. Certains des concepts de modèles sont les suivants -
Les contrôleurs communiquent avec les modèles et leur demandent de récupérer les informations dont ils ont besoin. Ces informations récupérées sont ensuite transmises par le contrôleur à la vue. Enfin, View rendra le modèle sous forme de données de présentation consommables par l'utilisateur.
Il est très rare qu'un modèle interagisse directement avec une vue, mais cela peut parfois arriver.
Les modèles peuvent se parler et ne sont pas autonomes. Ils ont des relations les uns avec les autres. Ces relations permettent à un contrôleur d'obtenir des informations plus facilement et plus rapidement, car il n'a pas à interagir avec différents modèles; les modèles peuvent le faire eux-mêmes.
Jetons un coup d'œil à un modèle simple - MyModel
<?php
namespace Tutorial\Model;
class Book {
public $id; public $author;
public $title;
}
Base de données dans Zend Framework
Le framework Zend fournit une classe simple et riche en fonctionnalités, Zend \ Db \ TableGateway \ TableGateway pour rechercher, insérer, mettre à jour et supprimer des données d'une table de base de données.
Voyons comment connecter le MySqlservice via le pilote PDO de PHP dans le framework Zend en suivant les étapes suivantes.
Étape 1: créer une base de données dans MySQL
Créer une base de données tutorialssur le serveur MySQL local. On peut utiliserphpmyadminou tout autre outil GUI MySQL à cet effet. Utilisons leMySQL clientdans l'invite de commande. Connectez-vous au serveur mysql et exécutez la commande suivante pour créer letutorial base de données.
create database tutorials
Étape 2: créer un tableau dans la base de données des didacticiels
Créons maintenant une base de données book dans le tutorials db à l'aide de la commande SQL suivante.
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)
);
Étape 3: Remplissez les données dans la table de livre
Remplissez le booktable avec des exemples de données. Utilisez la commande SQL suivante.
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');
Étape 4: Mettre à jour la connexion à la base de données
Mettez à jour le fichier de configuration globale, qui est - myapp / config / autoload / global.php avec les informations nécessaires sur le lecteur de base de données.
<?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',
),
),
);
Étape 5: mettre à jour les informations d'identification de la base de données
Mettez à jour les informations d'identification de la base de données dans le fichier de configuration local, qui est - myapp / config / autoload / local.php. De cette façon, nous pouvons séparer les informations d'identification de connexion à la base de données locale et en direct.
<?php
return array(
'db' => array(
'username' => '<user_name>',
'password' => '<password>',
),
);
Étape 6: Créer un modèle pour le livre
Créons un modèle, Book dans notre module srcannuaire. En général, les modèles sont regroupés dans le dossier Model - /myapp/module/Tutorial/src/Model/Book.php.
<?php
namespace Tutorial\Model;
class Book {
public $id;
public $author; public $title;
}
Étape 7: implémenter exchangeArray dans le modèle de livre
le TableGateway interagit avec un modèle via le exchangeArrayfonction. L'argument standard de la fonction exchangeArray est l'ensemble de résultats de la base de données stocké en tant que tableau PHP. En utilisant leexchangeArrayfunction, la propriété d'un modèle peut être facilement synchronisée avec la table de base de données correspondante.
Mettre à jour le modèle, Book comme indiqué ci-dessous -
<?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;
}
}
Étape 8: Utilisez TableGateway pour récupérer le livre
Créez une classe, BookTablepour récupérer les informations du livre dans la base de données. Créez la classe BookTable dans leModel dossier lui-même.
<?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;
}
}
Nous avons utilisé select()méthode de la classe TableGateway pour récupérer les informations du livre à partir de la base de données. Mais, nous n'avons utilisé aucune référence à la table -bookdans le code. Le TableGateway est de nature générique et il peut récupérer des données de n'importe quelle table en utilisant certaines configurations. Habituellement, ces configurations sont effectuées dans lemodule.config.php fichier, dont nous parlerons dans les étapes suivantes.
Étape 9: Configurer la classe BookTable
Mettez à jour le module tutoriel, Module.php avec le getServiceConfig() méthode.
<?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);
},
],
];
}
}
Ici, nous avons enregistré le BookTableclasse en utilisant le gestionnaire de services. La classe BookTable est utilisée pour récupérer les informations du livre et en l'enregistrant, nous pouvons y accéder partout où c'est nécessaire. Depuis, les services enregistrés sont partagés, ils augmentent les performances, réduisent la consommation de mémoire, etc.
Un autre élément, Model \ BookTableGateway :: class est l'objet TableGateway spécialisé pour le Book modèle et est une dépendance du BookTable.
Étape 10: mise à jour de la configuration du TutorialController
Nous avons besoin du BookTableservice dans le contrôleur du didacticiel pour récupérer les informations du livre. Pour obtenir le service BookTable, enregistrez-le en tant que dépendance de constructeur dans TutorialController.
Cette dépendance de constructeur permet d'obtenir le service BookTable pendant que le contrôleur lui-même est en phase d'initialisation. Mettre à jour la section contrôleur de la configuration du module tutoriel,module.config.php comme indiqué ci-dessous.
'controllers' => [
'factories' => [
Controller\TutorialController::class => function($container) {
return new Controller\TutorialController(
$container->get(Model\BookTable::class)
);
},
],
],
Étape 11: Mettre à jour le contrôleur du didacticiel
Cela se fait en respectant les trois étapes suivantes.
- Ajoutez un constructeur avec BookTable comme argument.
private $table;
public function __construct(BookTable $table) { $this->table = $table;
}
Récupérez les informations du livre à l'aide de BookTable's fetchAll() et enregistrez-le dans la vue.
public function indexAction() {
$view = new ViewModel([
'data' => $this->table->fetchAll(), ]); return $view;
}
Affichez les informations du livre dans le script de visualisation.
<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>
Étape 12: Exécutez l'application
Vérifiez l'application en exécutant - http://localhost:8080/tutorial.
![](https://assets.edu.lat/zend_framework/images/run_application.jpg)