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.