Hướng dẫn tương tác giữa Zend Framework 2 và Database

Hướng dẫn tương tác giữa Zend Framework 2 và Database

Tiếp nối cho bài viết về Zend Framework 2 - Startup, chỉ đơn giản là cài đặt và chạy bộ khung của ứng dụng ZF2, hôm nay mình sẽ viết tiếp sự tương tác của ZF2 với Database. Cụ thể trong bài này mình sẽ dùng database là Mysql server và bộ thư viện PDO để tương tác. Đại đa số các bài hướng dẫn trên mạng về sự tương tác DB với ZF2 chủ yếu tập trung với việc dùng class TableGateway, bài viết của mình đơn giản hơn là dùng chính PDO để tương tác với MySQL server luôn.

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.

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.

Bạn thấy bài viết này như thế nào?: 
Average: 10 (1 vote)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Việc ly dị cũng có thể được thực hiện qua Facebook

Việc ly dị cũng có thể được thực hiện qua Facebook

Cần phải làm thế nào nếu việc gửi đơn ly dị ra tòa gặp trở ngại do người chồng hoặc vợ không thể

Steve Jobs đã đúng: Google đang đi theo con đường của Microsoft

Steve Jobs đã đúng: Google đang đi theo con đường của Microsoft

Thời điểm năm ngoái, khi Larry Page chuẩn bị nhận trách nhiệm lãnh đạo Google, CEO hiện tại của “gã khổng lồ” đã tới gặp Steve Jobs

CMS WordPress

Nền tảng blog WordPress được tích hợp với Facebook

Facebook cho biết vừa cung cấp một plugin mới cho phép các chủ blog sử dụng nền tảng WordPress có thể dễ dàng tích hợp các tính năng của Facebook, chẳng hạn như đăng lên Timeline.

Công ty diệt chuột T&C

 

Diet con trung