Zend Framework - Modeller ve Veritabanı

Bu bölümde, Zend Framework'ün çeşitli modelleri ve veri tabanı hakkında tartışacağız.

Zend Framework'teki modeller

Model, uygulamanın mantıksal veri temsilini tanımlar. Örneğin, bir alışveriş sepeti uygulamasında - Ürün, Müşteri, Alışveriş Sepeti ve Siparişler modellerdir. Tuttuğu varlığın özelliklerini tanımlarlar. Modellerin bazı kavramları aşağıdaki gibidir -

  • Denetleyiciler modellerle iletişim kurar ve ihtiyaç duydukları bilgileri almalarını ister. Bu geri alınan bilgiler daha sonra kontrolör tarafından Görünüme aktarılır. Son olarak, View modeli kullanıcı tarafından tüketilebilir sunum verileri olarak işleyecektir.

  • Bir modelin bir görünümle doğrudan etkileşime girmesi çok nadirdir, ancak bazen olabilir.

  • Modeller birbirleriyle konuşabilir ve bağımsız değildir. Birbirleriyle ilişkileri var. Bu ilişkiler, farklı modellerle etkileşime girmesi gerekmediğinden, bir kontrolörün bilgi almasını kolaylaştırır ve hızlandırır; modeller bunu kendileri yapabilir.

Basit bir modele bir göz atalım - MyModel

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

Zend Framework'te Veritabanı

Zend çerçevesi, bir veritabanı tablosundaki verileri bulmak, eklemek, güncellemek ve silmek için basit ve zengin özelliklere sahip bir sınıf, Zend \ Db \ TableGateway \ TableGateway sağlar.

Nasıl bağlanacağımızı görelim MySqlservice PHP'nin Zend çerçevesindeki PDO sürücüsü aracılığıyla aşağıdaki adımlar aracılığıyla.

Adım 1: MySQL'de veritabanı oluşturun

Veritabanı yarat tutorialsyerel MySQL sunucusunda. Kullanabilirizphpmyadminveya bu amaç için herhangi bir MySQL GUI aracı. KullanalımMySQL clientkomut isteminde. Mysql sunucusuna bağlanın ve aşağıdaki komutu çalıştırın.tutorial veri tabanı.

create database tutorials

Adım 2: Öğreticiler veritabanında tablo oluşturun

Şimdi bir veritabanı oluşturalım book içinde tutorials db aşağıdaki SQL komutunu kullanarak.

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. Adım: Kitap tablosundaki verileri doldurun

Doldurun bookörnek veriler içeren tablo. Aşağıdaki SQL komutunu kullanın.

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

Adım 4: Veritabanı Bağlantısını Güncelleyin

Myapp / config / autoload / global.php olan global konfigürasyon dosyasını gerekli veritabanı sürücü bilgileriyle güncelleyin.

<?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. Adım: Veritabanı Kimlik Bilgilerini Güncelleyin

Myapp / config / autoload / local.php olan yerel yapılandırma dosyasındaki veritabanı kimlik bilgilerini güncelleyin. Bu şekilde yerel ve canlı veritabanı bağlantı kimlik bilgilerini ayırabiliriz.

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

6. Adım: Kitap için Model Oluşturun

Bir Model oluşturalım, Book modülümüzde srcdizin. Genel olarak, modeller Model klasörü altında gruplanır - /myapp/module/Tutorial/src/Model/Book.php.

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

7. Adım: ExchangeArray'i kitap modelinde uygulayın

TableGateway aracılığıyla bir modelle etkileşime girer exchangeArrayişlevi. ExchangeArray işlevinin standart argümanı, PHP dizisi olarak depolanan veritabanı sonuç kümesidir. KullanmakexchangeArrayfunction, bir modelin özelliği, karşılık gelen veritabanı tablosu ile kolayca senkronize edilebilir.

Modeli güncelleyin, Book aşağıda gösterildiği gibi -

<?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. Adım: Kitabı getirmek için TableGateway'i kullanın

Bir sınıf oluşturun, BookTableveritabanından kitap bilgilerini almak için. BookTable sınıfını oluşturunModel klasörün kendisi.

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

Kullandık select()Kitap bilgilerini veritabanından almak için TableGateway sınıfının yöntemi. Ancak, tabloya herhangi bir referans kullanmadık -bookkodda. TableGateway doğası gereği geneldir ve belirli konfigürasyonları kullanarak herhangi bir tablodan veri alabilir. Genellikle bu konfigürasyonlar,module.config.php sonraki adımlarda tartışacağımız dosya.

9. Adım: BookTable sınıfını yapılandırın

Eğitim modülünü güncelleyin, Module.php ile getServiceConfig() yöntem.

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

Burada kayıt olduk BookTableservis yöneticisini kullanarak sınıf. BookTable sınıfı, kitap bilgilerini almak için kullanılır ve bunu kaydederek, ihtiyaç duyduğumuz her yerde ona erişebiliriz. Kayıtlı servisler paylaşıldığı için performansı artırır, hafıza tüketimini azaltır vb.

Başka bir öğe, Model \ BookTableGateway :: class, Book model ve bir bağımlılıktır BookTable.

Adım 10: TutorialController Yapılandırmasını Güncelleyin

İhtiyacımız var BookTablekitap bilgilerini almak için öğretici denetleyicideki hizmet. BookTable hizmetini almak için TutorialController'da yapıcı bağımlılığı olarak kaydedin.

Bu Oluşturucu bağımlılığı, denetleyicinin kendisi başlatma aşamasındayken BookTable hizmetinin alınmasına yardımcı olur. Eğitim modülü yapılandırmasının denetleyici bölümünü güncelleyin,module.config.php Aşağıda gösterildiği gibi.

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

Adım 11: Eğitim Denetleyicisini Güncelleyin

Bu, aşağıdaki üç adıma bağlı kalarak yapılır.

  • Bağımsız değişken olarak BookTable ile yapıcı ekleyin .
private $table;
public function __construct(BookTable $table) { $this->table = $table; 
}
  • Kullanarak kitap bilgilerini alın BookTable's fetchAll() yöntemini seçin ve görünüme kaydedin.

public function indexAction() { 
   $view = new ViewModel([ 
      'data' => $this->table->fetchAll(), ]); return $view; 
}
  • Kitap bilgilerini görüntüleme komut dosyasında görüntüleyin.

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

Adım 12: Uygulamayı çalıştırın

Uygulamayı çalıştırarak kontrol edin - http://localhost:8080/tutorial.