Zend Framework - modele i baza danych

W tym rozdziale omówimy różne modele i bazę danych Zend Framework.

Modele w Zend Framework

Model definiuje logiczną reprezentację danych aplikacji. Na przykład w aplikacji koszyka na zakupy - modelami są Produkt, Klient, Koszyk i Zamówienia. Definiują właściwości jednostki, którą posiada. Niektóre koncepcje modeli są następujące -

  • Kontrolerzy komunikują się z modelami i proszą ich o pobranie potrzebnych informacji. Te pobrane informacje są następnie przekazywane przez kontroler do widoku. Wreszcie, View wyrenderuje model jako dane prezentacyjne użytkownika.

  • Bardzo rzadko zdarza się, że model bezpośrednio wchodzi w interakcję z widokiem, ale czasami może się zdarzyć.

  • Modelki mogą rozmawiać ze sobą i nie są samodzielne. Mają ze sobą relacje. Te relacje ułatwiają i przyspieszają uzyskiwanie informacji przez kontroler, ponieważ nie musi on współdziałać z różnymi modelami; modele mogą to zrobić samodzielnie.

Przyjrzyjmy się prostemu modelowi - MyModel

<?php  
namespace Tutorial\Model;  
class Book { 
   public $id; public $author; 
   public $title; 
}

Baza danych w Zend Framework

Framework Zend zapewnia prostą i bogatą w funkcje klasę Zend \ Db \ TableGateway \ TableGateway do wyszukiwania, wstawiania, aktualizowania i usuwania danych z tabeli bazy danych.

Zobaczmy, jak podłączyć MySqlservice poprzez sterownik PHP PDO w frameworku Zend, wykonując następujące kroki.

Krok 1: Utwórz bazę danych w MySQL

Utwórz bazę danych tutorialsna lokalnym serwerze MySQL. Możemy użyćphpmyadminlub jakiekolwiek inne narzędzia GUI MySQL przeznaczone do tego celu. UżyjmyMySQL clientw wierszu polecenia. Połącz się z serwerem mysql i uruchom następujące polecenie, aby utworzyć pliktutorial Baza danych.

create database tutorials

Krok 2: Utwórz tabelę w bazie danych samouczków

Stwórzmy teraz bazę danych book w tutorials db za pomocą następującego polecenia 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) 
);

Krok 3: Wypełnij dane w tabeli książek

Wypełnij booktabela z przykładowymi danymi. Użyj następującego polecenia 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');

Krok 4: Zaktualizuj połączenie z bazą danych

Zaktualizuj globalny plik konfiguracyjny, który jest - myapp / config / autoload / global.php, wprowadzając niezbędne informacje o dysku bazy danych.

<?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', 
      ), 
   ), 
);

Krok 5: Zaktualizuj poświadczenia bazy danych

Zaktualizuj referencje bazy danych w lokalnym pliku konfiguracyjnym, czyli - myapp / config / autoload / local.php. W ten sposób możemy oddzielić poświadczenia połączenia z lokalną i aktywną bazą danych.

<?php 
return array( 
   'db' => array( 
      'username' => '<user_name>', 
      'password' => '<password>', 
   ), 
);

Krok 6: Utwórz model książki

Stwórzmy Model, Book w naszym module srcinformator. Ogólnie modele są zgrupowane w folderze Model - /myapp/module/Tutorial/src/Model/Book.php.

<?php  
namespace Tutorial\Model;  
class Book { 
   public $id; 
   public $author; public $title; 
}

Krok 7: Zaimplementuj tablicę exchangeArray w modelu książki

Plik TableGateway współdziała z modelem za pośrednictwem exchangeArrayfunkcjonować. Standardowym argumentem funkcji exchangeArray jest zestaw wyników bazy danych przechowywany jako tablica PHP. UżywającexchangeArrayfunction, właściwość modelu można łatwo zsynchronizować z odpowiednią tabelą bazy danych.

Zaktualizuj model, Book jak pokazano poniżej -

<?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; 
   } 
}

Krok 8: Użyj TableGateway, aby pobrać książkę

Utwórz zajęcia, BookTableaby pobrać informacje o książce z bazy danych. Utwórz klasę BookTable wModel sam folder.

<?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; 
   } 
}

Użyliśmy select()metoda klasy TableGateway w celu pobrania informacji o książce z bazy danych. Ale nie użyliśmy żadnego odniesienia do tabeli -bookw kodzie. TableGateway ma charakter ogólny i może pobierać dane z dowolnej tabeli przy użyciu określonej konfiguracji. Zwykle te konfiguracje są wykonywane wmodule.config.php plik, który omówimy w kolejnych krokach.

Krok 9: Skonfiguruj klasę BookTable

Zaktualizuj moduł samouczka, Module.php z getServiceConfig() metoda.

<?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);
            },
         ],
      ];
   }
}

Tutaj zarejestrowaliśmy BookTableza pomocą menedżera usług. Klasa BookTable służy do pobierania informacji o książce i rejestrując ją, możemy uzyskać do niej dostęp w dowolnym miejscu. Ponieważ zarejestrowane usługi są udostępniane, zwiększają wydajność, zmniejszają zużycie pamięci itp.

Kolejna pozycja, Klasa Model \ BookTableGateway :: jest obiektem TableGateway specjalizującym się w Book modelu i jest zależnością BookTable.

Krok 10: Zaktualizuj konfigurację TutorialController

Potrzebujemy BookTableusługa w kontrolerze samouczka, aby pobrać informacje o książce. Aby uzyskać usługę BookTable, zarejestruj ją jako zależność konstruktora w TutorialController.

Ta zależność od konstruktora pomaga uzyskać usługę BookTable, gdy sam kontroler jest na etapie inicjalizacji. Zaktualizuj sekcję kontrolera konfiguracji modułu samouczka,module.config.php jak pokazano niżej.

'controllers' => [ 
   'factories' => [ 
      Controller\TutorialController::class => function($container) { 
         return new Controller\TutorialController( 
            $container->get(Model\BookTable::class) 
         ); 
      }, 
   ], 
],

Krok 11: Zaktualizuj kontroler samouczka

Odbywa się to poprzez przestrzeganie następujących trzech kroków.

  • Dodaj konstruktora z BookTable jako argumentem.
private $table;
public function __construct(BookTable $table) { $this->table = $table; 
}
  • Pobierz informacje o książce za pomocą BookTable's fetchAll() metoda i zarejestruj ją w widoku.

public function indexAction() { 
   $view = new ViewModel([ 
      'data' => $this->table->fetchAll(), ]); return $view; 
}
  • Wyświetl informacje o książce w skrypcie widoku.

<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>

Krok 12: Uruchom aplikację

Sprawdź aplikację, uruchamiając - http://localhost:8080/tutorial.