Zend Framework - Mô hình & Cơ sở dữ liệu
Trong chương này, chúng ta sẽ thảo luận về các mô hình khác nhau và cơ sở dữ liệu của Zend Framework.
Mô hình trong Zend Framework
Mô hình xác định biểu diễn dữ liệu lôgic của ứng dụng. Ví dụ, trong ứng dụng giỏ hàng - Sản phẩm, Khách hàng, Giỏ hàng và Đơn đặt hàng là các mô hình. Chúng xác định các thuộc tính của thực thể mà nó nắm giữ. Một số khái niệm về mô hình như sau:
Bộ điều khiển giao tiếp với các mô hình và yêu cầu họ truy xuất thông tin họ cần. Thông tin đã truy xuất này sau đó được bộ điều khiển chuyển tới View. Cuối cùng, View sẽ hiển thị mô hình dưới dạng dữ liệu trình bày có thể sử dụng được của người dùng.
Rất hiếm khi mô hình tương tác trực tiếp với một khung nhìn, nhưng đôi khi nó có thể xảy ra.
Các người mẫu có thể nói chuyện với nhau và không khép kín. Họ có quan hệ với nhau. Những mối quan hệ này giúp bộ điều khiển lấy thông tin dễ dàng và nhanh chóng hơn, vì nó không phải tương tác với các mô hình khác nhau; các mô hình có thể tự làm điều đó.
Hãy để chúng tôi xem xét một mô hình đơn giản - MyModel
<?php
namespace Tutorial\Model;
class Book {
public $id; public $author;
public $title;
}
Cơ sở dữ liệu trong Zend Framework
Zend framework cung cấp một lớp đơn giản và giàu tính năng, Zend \ Db \ TableGateway \ TableGateway để tìm, chèn, cập nhật và xóa dữ liệu khỏi bảng cơ sở dữ liệu.
Hãy để chúng tôi xem cách kết nối MySqlservice thông qua trình điều khiển PDO của PHP trong khung công tác Zend thông qua các bước sau.
Bước 1: Tạo cơ sở dữ liệu trong MySQL
Tạo nên cơ sở dữ liệu tutorialstrong máy chủ MySQL cục bộ. Chúng ta có thể sử dụngphpmyadminhoặc bất kỳ công cụ MySQL GUI nào khác cho mục đích này. Hãy để chúng tôi sử dụngMySQL clienttrong dấu nhắc lệnh. Kết nối với máy chủ mysql và chạy lệnh sau để tạotutorial cơ sở dữ liệu.
create database tutorials
Bước 2: Tạo bảng trong db hướng dẫn
Bây giờ chúng ta hãy tạo một cơ sở dữ liệu book bên trong tutorials db bằng cách sử dụng lệnh SQL sau.
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)
);
Bước 3: Nhập dữ liệu vào bảng sách
Điền vào bookbảng với dữ liệu mẫu. Sử dụng lệnh SQL sau.
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');
Bước 4: Cập nhật kết nối cơ sở dữ liệu
Cập nhật tệp cấu hình chung - myapp / config / autoload / global.php với thông tin ổ đĩa cơ sở dữ liệu cần thiết.
<?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',
),
),
);
Bước 5: Cập nhật thông tin đăng nhập cơ sở dữ liệu
Cập nhật thông tin đăng nhập cơ sở dữ liệu trong tệp cấu hình cục bộ, đó là - myapp / config / autoload / local.php. Bằng cách này, chúng ta có thể phân tách thông tin xác thực kết nối cơ sở dữ liệu cục bộ và cơ sở dữ liệu trực tiếp.
<?php
return array(
'db' => array(
'username' => '<user_name>',
'password' => '<password>',
),
);
Bước 6: Tạo mô hình cho sách
Hãy để chúng tôi tạo một Mô hình, Book trong mô-đun của chúng tôi srcdanh mục. Nói chung, các mô hình được nhóm trong thư mục Model - /myapp/module/Tutorial/src/Model/Book.php.
<?php
namespace Tutorial\Model;
class Book {
public $id;
public $author; public $title;
}
Bước 7: Triển khai ExchangeArray trong mô hình sách
Các TableGateway tương tác với một mô hình thông qua exchangeArraychức năng. Đối số tiêu chuẩn của hàm exchangeArray là tập kết quả cơ sở dữ liệu được lưu trữ dưới dạng mảng PHP. Sử dụngexchangeArrayfunction, thuộc tính của một mô hình có thể được đồng bộ hóa dễ dàng với bảng cơ sở dữ liệu tương ứng.
Cập nhật mô hình, Book như hình dưới đây -
<?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;
}
}
Bước 8: Sử dụng TableGateway để tìm nạp sách
Tạo một lớp học, BookTableđể lấy thông tin sách từ cơ sở dữ liệu. Tạo lớp học, BookTable trongModel thư mục chính nó.
<?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;
}
}
Chúng tôi vừa dùng select()của lớp TableGateway để lấy thông tin sách từ cơ sở dữ liệu. Nhưng, chúng tôi chưa sử dụng bất kỳ tham chiếu nào đến bảng -booktrong mã. TableGateway về bản chất là chung và nó có thể lấy dữ liệu từ bất kỳ bảng nào bằng cách sử dụng cấu hình nhất định. Thông thường, các cấu hình này được thực hiện trongmodule.config.php mà chúng ta sẽ thảo luận trong các bước tiếp theo.
Bước 9: Định cấu hình lớp BookTable
Cập nhật mô-đun hướng dẫn, Module.php với getServiceConfig() phương pháp.
<?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);
},
],
];
}
}
Tại đây, chúng tôi đã đăng ký BookTablelớp sử dụng trình quản lý dịch vụ. Lớp BookTable được sử dụng để tìm nạp thông tin sách và bằng cách đăng ký, chúng ta có thể truy cập bất cứ khi nào cần. Do đó, các dịch vụ đã đăng ký được chia sẻ, chúng tăng hiệu suất, giảm mức tiêu thụ bộ nhớ, v.v.
Một mục khác, lớp Model \ BookTableGateway :: là đối tượng TableGateway chuyên dụng cho Book mô hình và là sự phụ thuộc của BookTable.
Bước 10: Cập nhật cấu hình TutorialController
Chúng tôi cần BookTabledịch vụ trong bộ điều khiển hướng dẫn để tìm nạp thông tin sách. Để có được dịch vụ BookTable, hãy đăng ký nó dưới dạng phụ thuộc hàm khởi tạo trong TutorialController.
Phụ thuộc Constructor này giúp nhận được dịch vụ BookTable trong khi bản thân bộ điều khiển đang ở giai đoạn khởi tạo. Cập nhật phần bộ điều khiển của cấu hình mô-đun hướng dẫn,module.config.php như hình bên dưới.
'controllers' => [
'factories' => [
Controller\TutorialController::class => function($container) {
return new Controller\TutorialController(
$container->get(Model\BookTable::class)
);
},
],
],
Bước 11: Cập nhật bộ điều khiển hướng dẫn
Điều này được thực hiện bằng cách tuân thủ ba bước sau.
- Thêm hàm tạo với BookTable làm đối số.
private $table;
public function __construct(BookTable $table) { $this->table = $table;
}
Tìm nạp thông tin sách bằng cách sử dụng BookTable's fetchAll() và đăng ký nó vào chế độ xem.
public function indexAction() {
$view = new ViewModel([
'data' => $this->table->fetchAll(), ]); return $view;
}
Hiển thị thông tin sách trong tập lệnh xem.
<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>
Bước 12: Chạy ứng dụng
Kiểm tra ứng dụng bằng cách chạy - http://localhost:8080/tutorial.