Zend Framework - Modelle & Datenbank
In diesem Kapitel werden wir die verschiedenen Modelle und die Datenbank des Zend Frameworks diskutieren.
Modelle im Zend Framework
Ein Modell definiert die logische Datendarstellung der Anwendung. Beispiel: In einer Warenkorbanwendung sind Produkt, Kunde, Warenkorb und Bestellungen Modelle. Sie definieren die Eigenschaften der Entität, die sie enthält. Einige der Konzepte von Modellen sind wie folgt:
Controller kommunizieren mit Modellen und bitten sie, die benötigten Informationen abzurufen. Diese abgerufenen Informationen werden dann von der Steuerung an die Ansicht übergeben. Schließlich rendert View das Modell als vom Benutzer konsumierbare Präsentationsdaten.
Es ist sehr selten, dass ein Modell direkt mit einer Ansicht interagiert, aber manchmal kann es vorkommen.
Models können miteinander sprechen und sind nicht in sich geschlossen. Sie haben Beziehungen zueinander. Diese Beziehungen erleichtern und beschleunigen es einem Controller, Informationen abzurufen, da er nicht mit verschiedenen Modellen interagieren muss. Die Models können das selbst machen.
Schauen wir uns ein einfaches Modell an - MyModel
<?php
namespace Tutorial\Model;
class Book {
public $id;
public $author;
public $title;
}
Datenbank in Zend Framework
Das Zend-Framework bietet eine einfache und funktionsreiche Klasse, Zend \ Db \ TableGateway \ TableGateway, zum Suchen, Einfügen, Aktualisieren und Löschen von Daten aus einer Datenbanktabelle.
Lassen Sie uns sehen, wie man das verbindet MySqlservice über den PDO-Treiber von PHP im Zend-Framework durch die folgenden Schritte.
Schritt 1: Erstellen Sie eine Datenbank in MySQL
Datenbank erstellen tutorialsauf dem lokalen MySQL-Server. Wir können benutzenphpmyadminoder andere MySQL-GUI-Tools für diesen Zweck. Verwenden wir dieMySQL clientin der Eingabeaufforderung. Stellen Sie eine Verbindung zum MySQL-Server her und führen Sie den folgenden Befehl aus, um das zu erstellentutorial Datenbank.
create database tutorials
Schritt 2: Erstellen Sie eine Tabelle in den Tutorials db
Lassen Sie uns jetzt eine Datenbank erstellen book in dem tutorials db mit dem folgenden SQL-Befehl.
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)
);
Schritt 3: Füllen Sie die Daten in die Buchtabelle
Füllen Sie die bookTabelle mit Beispieldaten. Verwenden Sie den folgenden SQL-Befehl.
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');
Schritt 4: Aktualisieren Sie die Datenbankverbindung
Aktualisieren Sie die globale Konfigurationsdatei - myapp / config / autoload / global.php - mit den erforderlichen Informationen zum Datenbanklaufwerk.
<?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',
),
),
);
Schritt 5: Aktualisieren Sie die Datenbankanmeldeinformationen
Aktualisieren Sie die Datenbankanmeldeinformationen in der lokalen Konfigurationsdatei - myapp / config / autoload / local.php. Auf diese Weise können wir die Anmeldeinformationen für die lokale und die Live-Datenbankverbindung trennen.
<?php
return array(
'db' => array(
'username' => '<user_name>',
'password' => '<password>',
),
);
Schritt 6: Modell für Buch erstellen
Lassen Sie uns ein Modell erstellen, Book in unserem Modul srcVerzeichnis. Im Allgemeinen werden Modelle im Ordner "Modell" zusammengefasst - /myapp/module/Tutorial/src/Model/Book.php.
<?php
namespace Tutorial\Model;
class Book {
public $id;
public $author;
public $title;
}
Schritt 7: Implementieren Sie exchangeArray im Buchmodell
Das TableGateway interagiert mit einem Modell über die exchangeArrayFunktion. Das Standardargument der Funktion exchangeArray ist die Datenbank-Ergebnismenge, die als PHP-Array gespeichert ist. Verwendung derexchangeArrayfunctionkann die Eigenschaft eines Modells einfach mit der entsprechenden Datenbanktabelle synchronisiert werden.
Aktualisieren Sie das Modell, Book wie unten gezeigt -
<?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;
}
}
Schritt 8: Verwenden Sie TableGateway, um ein Buch abzurufen
Erstelle eine Klasse, BookTableum Buchinformationen aus der Datenbank abzurufen. Erstellen Sie die Klasse BookTable in derModel Ordner selbst.
<?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;
}
}
Wir haben benutzt select()Methode der TableGateway-Klasse zum Abrufen der Buchinformationen aus der Datenbank. Wir haben jedoch keinen Verweis auf die Tabelle verwendet -bookim Code. Das TableGateway ist generischer Natur und kann mithilfe einer bestimmten Konfiguration Daten aus jeder Tabelle abrufen. Normalerweise werden diese Konfigurationen in dermodule.config.php Datei, die wir in den folgenden Schritten diskutieren werden.
Schritt 9: Konfigurieren Sie die BookTable-Klasse
Aktualisieren Sie das Tutorial-Modul. Module.php mit dem getServiceConfig() Methode.
<?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);
},
],
];
}
}
Hier haben wir die registriert BookTableKlasse mit dem Service Manager. Die BookTable-Klasse wird zum Abrufen der Buchinformationen verwendet. Durch Registrieren können wir überall darauf zugreifen. Da die registrierten Dienste gemeinsam genutzt werden, erhöhen sie die Leistung, verringern den Speicherverbrauch usw.
Ein weiteres Element, Model \ BookTableGateway :: class, ist das TableGateway-Objekt, das auf die Book Modell und ist eine Abhängigkeit der BookTable.
Schritt 10: Aktualisieren Sie die TutorialController-Konfiguration
Wir brauchen die BookTableService im Tutorial-Controller, um die Buchinformationen abzurufen. Um den BookTable-Dienst abzurufen, registrieren Sie ihn als Konstruktorabhängigkeit im TutorialController.
Diese Konstruktorabhängigkeit hilft dabei, den BookTable-Dienst abzurufen, während sich der Controller selbst in der Initialisierungsphase befindet. Aktualisieren Sie den Controller-Abschnitt der Konfiguration des Lernmoduls.module.config.php Wie nachfolgend dargestellt.
'controllers' => [
'factories' => [
Controller\TutorialController::class => function($container) {
return new Controller\TutorialController(
$container->get(Model\BookTable::class)
);
},
],
],
Schritt 11: Aktualisieren Sie Tutorial Controller
Dies erfolgt durch Befolgen der folgenden drei Schritte.
- Fügen Sie einen Konstruktor mit BookTable als Argument hinzu.
private $table;
public function __construct(BookTable $table) {
$this->table = $table;
}
Holen Sie sich Buchinformationen mit dem BookTable's fetchAll() Methode und registrieren Sie es in der Ansicht.
public function indexAction() {
$view = new ViewModel([
'data' => $this->table->fetchAll(),
]);
return $view;
}
Zeigen Sie die Buchinformationen im Ansichtsskript an.
<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>
Schritt 12: Führen Sie die Anwendung aus
Überprüfen Sie die Anwendung, indem Sie - ausführen http://localhost:8080/tutorial.