Zend Framework - โมเดลและฐานข้อมูล

ในบทนี้เราจะพูดถึงโมเดลต่างๆและฐานข้อมูลของ Zend Framework

โมเดลใน Zend Framework

แบบจำลองกำหนดการแสดงข้อมูลเชิงตรรกะของแอ็พพลิเคชัน ตัวอย่างเช่นในแอปพลิเคชันตะกร้าสินค้า - ผลิตภัณฑ์ลูกค้ารถเข็นและคำสั่งซื้อเป็นแบบจำลอง กำหนดคุณสมบัติของเอนทิตีที่เก็บไว้ แนวคิดบางส่วนของแบบจำลองมีดังนี้ -

  • ตัวควบคุมสื่อสารกับโมเดลและขอให้ดึงข้อมูลที่ต้องการ ข้อมูลที่ดึงมานี้จะถูกส่งผ่านโดยคอนโทรลเลอร์ไปยัง View สุดท้าย View จะแสดงผลแบบจำลองเป็นข้อมูลการนำเสนอที่ผู้ใช้บริโภคได้

  • เป็นเรื่องยากมากที่โมเดลจะโต้ตอบกับมุมมองโดยตรง แต่บางครั้งก็อาจเกิดขึ้นได้

  • นางแบบสามารถพูดคุยกันได้และไม่มีตัวตน พวกเขามีความสัมพันธ์ซึ่งกันและกัน ความสัมพันธ์เหล่านี้ทำให้คอนโทรลเลอร์รับข้อมูลได้ง่ายและเร็วขึ้นเนื่องจากไม่จำเป็นต้องโต้ตอบกับโมเดลต่างๆ โมเดลสามารถทำได้ด้วยตัวเอง

ลองมาดูแบบจำลองง่ายๆ - MyModel

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

ฐานข้อมูลใน Zend Framework

Zend framework มีคลาสที่เรียบง่ายและมีฟีเจอร์มากมาย Zend \ Db \ TableGateway \ TableGateway เพื่อค้นหาแทรกอัปเดตและลบข้อมูลจากตารางฐานข้อมูล

ให้เราดูวิธีการเชื่อมต่อ MySqlservice ผ่านโปรแกรมควบคุม PDO ของ PHP ใน Zend framework ผ่านขั้นตอนต่อไปนี้

ขั้นตอนที่ 1: สร้างฐานข้อมูลใน MySQL

สร้างฐานข้อมูล tutorialsในเซิร์ฟเวอร์ MySQL ภายใน เราสามารถใช้phpmyadminหรือเครื่องมือ MySQL GUI อื่น ๆ เพื่อจุดประสงค์นี้ ให้เราใช้ไฟล์MySQL clientในพรอมต์คำสั่ง เชื่อมต่อกับเซิร์ฟเวอร์ mysql และรันคำสั่งต่อไปนี้เพื่อสร้างไฟล์tutorial ฐานข้อมูล.

create database tutorials

ขั้นตอนที่ 2: สร้างตารางในฐานข้อมูลแบบฝึกหัด

ตอนนี้ให้เราสร้างฐานข้อมูล book ใน tutorials db โดยใช้คำสั่ง 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) 
);

ขั้นตอนที่ 3: เติมข้อมูลในตารางหนังสือ

เติมไฟล์ bookตารางที่มีข้อมูลตัวอย่าง ใช้คำสั่ง 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');

ขั้นตอนที่ 4: อัปเดตการเชื่อมต่อฐานข้อมูล

อัพเดตไฟล์คอนฟิกูเรชันส่วนกลางซึ่งก็คือ - myapp / config / autoload / global.php ด้วยข้อมูลไดรฟ์ฐานข้อมูลที่จำเป็น

<?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: อัปเดตข้อมูลรับรองฐานข้อมูล

อัพเดตข้อมูลรับรองฐานข้อมูลในไฟล์คอนฟิกูเรชันภายในซึ่งก็คือ - myapp / config / autoload / local.php ด้วยวิธีนี้เราสามารถแยกข้อมูลรับรองการเชื่อมต่อฐานข้อมูลแบบโลคัลและแบบสดได้

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

ขั้นตอนที่ 6: สร้างโมเดลสำหรับหนังสือ

ให้เราสร้างแบบจำลอง Book ในโมดูลของเรา srcไดเรกทอรี โดยทั่วไปโมเดลจะถูกจัดกลุ่มไว้ในโฟลเดอร์ Model - /myapp/module/Tutorial/src/Model/Book.php

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

ขั้นตอนที่ 7: ใช้ exchangeArray ในโมเดลหนังสือ

TableGateway โต้ตอบกับโมเดลผ่านไฟล์ exchangeArrayฟังก์ชัน อาร์กิวเมนต์มาตรฐานของฟังก์ชัน exchangeArray คือชุดผลลัพธ์ฐานข้อมูลที่จัดเก็บเป็นอาร์เรย์ PHP ใช้exchangeArrayfunctionคุณสมบัติของโมเดลสามารถซิงค์กับตารางฐานข้อมูลที่เกี่ยวข้องได้อย่างง่ายดาย

อัปเดตโมเดล Book ดังแสดงด้านล่าง -

<?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: ใช้ TableGateway เพื่อดึงหนังสือ

สร้างชั้นเรียน BookTableเพื่อดึงข้อมูลหนังสือจากฐานข้อมูล สร้างคลาส BookTable ในไฟล์Model โฟลเดอร์นั้นเอง

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

เราได้ใช้ select()วิธีการของคลาส TableGateway เพื่อดึงข้อมูลหนังสือจากฐานข้อมูล แต่เราไม่ได้ใช้การอ้างอิงใด ๆ กับตาราง -bookในรหัส TableGateway มีลักษณะทั่วไปและสามารถดึงข้อมูลจากตารางใดก็ได้โดยใช้การกำหนดค่าบางอย่าง โดยปกติการกำหนดค่าเหล่านี้จะทำในไฟล์module.config.php ซึ่งเราจะพูดถึงในขั้นตอนต่อไป

ขั้นตอนที่ 9: กำหนดค่าคลาส BookTable

อัปเดตโมดูลการสอน Module.php กับ getServiceConfig() วิธี.

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

ที่นี่เราได้ลงทะเบียนไฟล์ BookTableคลาสโดยใช้ตัวจัดการบริการ ชั้น BookTable ใช้เพื่อดึงข้อมูลหนังสือและโดยการลงทะเบียนเราสามารถเข้าถึงได้ทุกที่ที่ต้องการ เนื่องจากมีการแชร์บริการที่ลงทะเบียนไว้ซึ่งจะเพิ่มประสิทธิภาพลดการใช้หน่วยความจำ ฯลฯ

รายการอื่น Model \ BookTableGateway :: class คือวัตถุ TableGateway เฉพาะสำหรับ Book แบบจำลองและเป็นการพึ่งพาของ BookTable.

ขั้นตอนที่ 10: อัปเดตการกำหนดค่าตัวควบคุมการสอน

เราต้องการไฟล์ BookTableบริการในตัวควบคุมการสอนเพื่อดึงข้อมูลหนังสือ ในการรับบริการ BookTable ให้ลงทะเบียนเป็น constructor dependency ใน TutorialController

การพึ่งพาตัวสร้างนี้ช่วยในการรับบริการ BookTable ในขณะที่ตัวควบคุมเองอยู่ในขั้นตอนการเริ่มต้น อัปเดตส่วนคอนโทรลเลอร์ของการกำหนดค่าโมดูลการสอนmodule.config.php ดังแสดงด้านล่าง

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

ขั้นตอนที่ 11: อัปเดตตัวควบคุมการสอน

ทำได้โดยปฏิบัติตามสามขั้นตอนต่อไปนี้

  • เพิ่มตัวสร้างด้วยBookTableเป็นอาร์กิวเมนต์
private $table;
public function __construct(BookTable $table) { $this->table = $table; 
}
  • ดึงข้อมูลหนังสือโดยใช้ไฟล์ BookTable's fetchAll() วิธีการและลงทะเบียนในมุมมอง

public function indexAction() { 
   $view = new ViewModel([ 
      'data' => $this->table->fetchAll(), ]); return $view; 
}
  • แสดงข้อมูลหนังสือในสคริปต์มุมมอง

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

ขั้นตอนที่ 12: เรียกใช้แอปพลิเคชัน

ตรวจสอบแอปพลิเคชันโดยเรียกใช้ - http://localhost:8080/tutorial.