1 - Cấu hình data cho việc kết nối cơ sở dữ liệu
Với ZF2, việc config trở nên đơn giản hơn khi chỉ việc sử dụng array PHP để thực hiện. Bạn thêm vào tập tin global.php trong thư mục config/autoload để config cấu hình database, cũng như thông báo service sẽ dùng cho việc kết nối như bên dưới.
return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:host=localhost;dbname=zf2', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'", PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ), ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory' ), ), );Đối với ZF2, nó sẽ không wrapper nhiều driver, và nhiều dsn khi dùng Pdo nữa, nên chúng ta phải tự thân vận động, điều này có ích cho ta và cho ứng dụng. Ở bên trên chúng ta cấu hình cho global.php và không có username, password để truy xuất database. Giờ chúng ta thêm file local.php cũng trong thư mục config/autoload như bên dưới.
return array( 'db' => array( 'username' => 'root', 'password' => '', 'driver_options' => array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ), ) );Tiếp đó, chúng ta sẽ xây dựng tập tin model, làm nhiệm vụ tương tác database. Chúng ta tạo thêm 1 folder Model trong thư mục module/Application/src và tạo luôn file User.php trong thư mục Model này. Nội dung trong file User.php như bên dưới.
<?php namespace Application\Model; use Zend\Db\Adapter\Adapter; use \Exception; class User { protected $_adapter; public function __construct(Adapter $adapter) { $this->_adapter = $adapter; } public function getUserByLogin($username, $password) { try { $stmt = $this->_adapter->createStatement(); $sql = "Call sp_login(:p_username, :p_password);"; $stmt->prepare($sql); $result = $stmt->execute(array( 'p_username' => $username, 'p_password' => $password, )); return $result->current(); } catch (Exception $exc) { var_dump($exc); } } }Việc tiếp theo là chúng ta sẽ cấu hình cho module tự nhận dạng class Model chúng ta vửa thêm bên trên. Mở file Module.php trong thư mục module/Application và bổ sung những phần như comment bên dưới.
<?php
namespace Application; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; use Application\Model; // Bổ sung phần này class Module { // Bổ sung phần này public function getServiceConfig() { return array( 'factories' => array( 'Application\Model\User' => function ($sm) { return new Model\User($sm->get ('Zend\Db\Adapter\Adapter')); } ), ); } }Việc cuối cùng, chúng ta chỉnh sửa một tí IndexController để test tính năng access data này, đoạn code như bên dưới. Chúng ta chỉ cần bổ sung thêm vào file đã có sẵn này.
namespace Application; public function loginAction() { $username = 'tmquang6805'; $password = '123456'; $userModel = $this->getServiceLocator()->get('Application\Model\User'); $result = $userModel->getUserByLogin($username, $password); var_dump($result); }Như vậy là xong, mọi người sẽ gặp phải vấn đề là không vào được action login này. Đây là 1 chủ đề khác. Mình sẽ sớm tìm thời gian post lên để mọi người nhanh chóng hòa nhập với Zend Framework 2.
Zend Framework 2 - Startup
Zend Framework 2 - Routing - Part 1
Xem thêm về Zend Framework 2 tại tmquang6805.blogspot.com
No comments:
Post a Comment