SlideShare a Scribd company logo
1 of 12
Download to read offline
Thao tác Database trong Zend Framework 2
Xem 'Bài 7 - Nhúng template vào ứng dung ZF2 (P3)' trước khi thực hành bài này
A. Xây dựng 'Admin' MODULE
- Xây dựng MODULE có tên Admin với cấu trúc như sau:
- Bây giờ chúng ta sẽ bắt đầu cấu hình MODULE này
- Mở tập tin /config/application.config.php thêm vào đoạn mã khai báo MODULE mới
<?php
return array(
'modules' => array(
'Application',
'Template',
'Admin'
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
),
);
- Mở tập tin /module/Admin/config/module.config.php đưa vào nội dung sau:
<?php
return array(
'controllers' => array(
'invokables' => array(
'AdminControllerIndex' => 'AdminControllerIndexController'
),
),
'router' => array(
'routes' => array(
'admin' => array(
'type' => 'segment',
'options' => array(
'route' => '/admin[/][:controller][/][:action][/][id/:id]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'__NAMESPACE__' => 'AdminController'
'controller' => 'AdminControllerIndex',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'admin' => __DIR__ . '/../view',
),
),
);
- Mở tập tin /module/Admin/Module.php thêm vào nội dung sau:
<?php
namespace Admin;
use ZendMvcModuleRouteListener;
use ZendMvcMvcEvent;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'ZendLoaderStandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}
- Mở tập tin /module/Admin/src/Admin/Controller/IndexController.php thêm vào nội dung sau:
<?php
namespace AdminController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
echo '<br />' . __METHOD__;
}
}
- Mở tập tin /module/Admin/view/admin/index/index.phtml thêm vào nội dung:
<?php echo '<br/>' . __FILE__;?>
- Mở tập tin /module/Admin/view/layout/layout.phtml thêm vào nội dung:
<?php echo $this->doctype(); ?>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<h1>Hello Admin</h1>
<?php echo $this->content; ?>
</body>
</html>
- Chạy thử URL localhost:8000/zf2basic/public/admin/ chúng ta sẽ có giao diện sau:
B. Tạo và kết nối với Database
- Tạo một database có tên ‘zfbasic’
- Tạo một bảng ‘users’ có cấu trúc như sau
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(32) NOT NULL,
`group` varchar(20) NOT NULL DEFAULT 'member',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
- Thêm vào bảng ‘users’ một số record để làm dữ liệu tạm
INSERT INTO `users` (`id`, `username`, `email`, `password`, `group`) VALUES
(1, 'admin', 'admin@zend.vn', '123456', 'admin'),
(2, 'manager', 'manager@zend.vn', '123456', 'admin'),
(3, 'user', 'user@zend.vn', '123456', 'member'),
(4, 'user01', 'user01@zend.vn', '123456', 'member'),
(5, 'user02', 'user02@zend.vn', '123456', 'member'),
(6, 'user03', 'user03@zend.vn', '123456', 'member'),
(7, 'user04', 'user04@zend.vn', '123456', 'member'),
(8, 'user05', 'user05@zend.vn', '123456', 'member'),
(9, 'user06', 'user06@zend.vn', '123456', 'member'),
(10, 'user07', 'user07@zend.vn', '123456', 'member'),
(11, 'user08', 'user08@zend.vn', '123456', 'member'),
(12, 'user09', 'user09@zend.vn', '123456', 'member'),
(13, 'user10', 'user10@zend.vn', '123456', 'member');
- Bây giờ chúng ta sẽ bắt đầu cấu hình để kết nối Zend Framework với Database
- Tạo thư mục /autoload trong thư mục /config. Thư mục này sẽ chứa các tập tin cấu hình và ứng dụng tự
động load dựa vào đoạn mã trong tập tin /config/application.config.php
//config_glob_paths: là một mảng chứa các tập tin cấu hình của ứng dụng
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
- Tạo tập tin /config/autoload/global.php với nội dung sau:
<?php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zfbasic;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES 'UTF8''
),
),
'service_manager' => array(
'factories' => array(
'ZendDbAdapterAdapter'
=> 'ZendDbAdapterAdapterServiceFactory',
),
),
);
- Trong mảng này có 2 phần tử
o ‘db’: Chứa mảng cấu hình kết nối đến hệ cơ sở dữ liệu MySQL
o ‘service_manager’: là một phần tử để chứa cấu hình các thành phần Database, Models, table, Forms,
filters, Authentication.
- Tạo tập tin /config/autoload/local.php, tập tin này chứa thông tin username/password kết nối hệ cơ sở dữ
liệu MySQL với nội dung sau:
<?php
return array(
'db' => array(
'username' => 'root',
'password' => '',
),
);
- Sau khi chúng ta tạo 2 tập tin /config/autoload/global.php và /config/autoload/local.php thì 2 mảng cấu
hình này sẽ được load vào ứng dụng.
C. Tạo MODEL và truy xuất dữ liệu trong bảng user
- Trong ZF2 việc truy xuất dữ liệu vẫn sử dụng MODEL nhưng nó được truy xuất qua đối
tượng ZendServiceManagerServiceManager và đối tượng này sẽ không lấy dữ liệu khi luồng xử lý vẫn
còn đang ở trong CONTROLLER và ACTION. Nó sẽ chỉ lấy dữ liệu ở ngoài VIEW mà thôi.
- Trong MODEL của ZF2 chúng ta sẽ phải tạo ra 2 đối tượng đó là:
o Đối tượng quản lý cấu trúc của bảng trong Database
o Đối tượng tương tác với Database
- Đầu tiên chúng ta sẽ tạo ra một thư mục tên /module/Admin/src/Admin/Model để chứa các tập tin tương
tác đến database
- Kế tiếp chúng ta sẽ tạo ra một đối tượng quản lý cấu trúc của bảng ‘users’ trong Database, tạo tập
tin /module/Admin/src/Admin/Model/User.php có nội dung như sau:
<?php
namespace AdminModel;
class User
{
public $id;
public $username;
public $email;
public $password;
public $group;
public function exchangeArray($data)
{
$this->id = (!empty($data['id'])) ? $data['id'] : null;
$this->username = (!empty($data['username'])) ? $data['username'] : null;
$this->email = (!empty($data['email'])) ? $data['email'] : null;
$this->password = (!empty($data['password'])) ? $data['password'] : null;
$this->group = (!empty($data['group'])) ? $data['group'] : null;
}
}
- Tiếp theo chúng ta tạo đối tượng tương tác với bảng ‘users’ này để lấy ra Database, tạo tập
tin /module/Admin/src/Admin/Model/UserTable.php có nội dung như sau:
<?php
namespace AdminModel;
use ZendDbTableGatewayTableGateway;
class UserTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
public function fetchAll()
{
echo __METHOD__;
}
}
- Đối với ZF1 khi chúng ta có MODEL chúng ta có thể nhúng và chạy trực tiếp trong ACTION của
CONTROLLER nhưng đối với ZF2 thì chúng ta sẽ phải chạy thông qua đối
tượng ZendServiceManagerServiceManager vì vậy chúng ta sẽ thêm một số mã nguồn mới vào trong
tập tin /module/Admin/Module.php
- Thêm vào đầu tập tin một số namespace
// Add these import statements:
use AdminModelUserTable;
use AdminModelUser;
use ZendDbResultSetResultSet;
use ZendDbTableGatewayTableGateway;
- Tiếp theo chúng ta tạo một phương thức getServiceConfig() trong tập tin này với nội dung sau:
public function getServiceConfig()
{
return array(
'factories' => array(
// DB
'UserTableGateway' => function ($sm) {
//Goi doi tuong ket noi voi Database
$dbAdapter = $sm->get('ZendDbAdapterAdapter');
//Goi doi tuong giup chung ta chuyen 1 doi tuong mảng thanh mot doi tuong
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new User());
//$resultSetPrototype = null;
//Dua cac gia tri 'users', $dbAdapter, $resultSetPrototype
//vao doi tuong ZendDbTableGateway
return new TableGateway('users', $dbAdapter, null, $resultSetPrototype);
},
'AdminModelUserTable' => function($sm) {
//Luc nao UserTableGateway la mot doi tuong cua ZendDbTableGateway
//chua cac gia tri ket noi den database va bang chung ta muon truy van
$tableGateway = $sm->get('UserTableGateway');
//Truyen doi tuong ZendDbTableGateway vao trong ham __construct()
//cua doi tuong AdminModelUserTable
$table = new UserTable($tableGateway);
return $table;
},
),
);
}
- Trong hàm trên chúng ta đã nạp một số đối tượng vào đối
tượng ZendServiceManagerServiceManager khi chúng ta cần dùng đến các đối tượng trên có thể gọi
thông qua đối tượng ZendServiceManagerServiceManager
- Bây giờ chúng ta sẽ bắt đầu lấy dữ liệu của bảng users ra, theo những bước sau:
- Mở tập tin /module/Admin/src/Admin/Model/UserTable.php sửa lại phương thức fetchAll() như sau:
public function fetchAll()
{
//echo __METHOD__;
return $this->tableGateway->select();
}
- Mở tập tin /module/Admin/src/Admin/Controller/IndexController.php sửa lại indexAction()
public function indexAction()
{
echo '<br />' . __METHOD__;
$userTable = $this->getServiceLocator()->get('AdminModelUserTable');
return new ViewModel (array('users' => $userTable->fetchAll()));
}
- Mở tập tin /module/Admin/view/admin/index/index.phtml sửa lại trang như sau:
<?php echo '<br/>' . __FILE__;?>
<?php
foreach ($this->users as $user){
echo "<pre>";
print_r($user);
echo "</pre>";
}
?>
- Chạy thử đường dẫn URL localhost:8000/zf2basic/public/admin/
D. Hiển thị dữ liệu
- Bây giờ chúng ta sẽ xây dựng giao diện để hiển thị danh sách của các User lấy từ bảng ‘users’ trong
database.
- Tạo thư mục /css trong thư mục /public
- Tạo tập tin /public/css/style.css, tập tin này có nội dung như sau:
#data{
border-collapse:collapse;
border:1px solid #ccc;
width: 800px;
}
#data .title{
text-align: center;
font-weight: bold;
}
#data td, th{
border:1px solid #ccc;
padding: 3px;
}
#data .txtCenter{
text-align: center;
}
.add{
padding: 3px;
margin: 3px 0px;
font-weight: bold;
}
- Mở tập tin /module/Admin/view/layout/layout.phtml chỉnh sửa nội dung lại thành:
<?php echo $this->doctype(); ?>
<html lang="en">
<head>
<meta charset="utf-8">
<?php echo $this->headLink()->prependStylesheet($this->basePath() . '/css/style.css');?>
</head>
<body>
<?php echo $this->content; ?>
</body>
</html>
Trong tập tin này chúng ta đã nhúng tập tin /public/css/style.css nên chúng ta sẽ sử dụng được các định
dạng của tập tin style.css
- Tiếp theo chúng ta sẽ cho danh sách hiển thị ở tập tin VIEW.
- Mở tập tin /module/Admin/view/admin/index/index.phtml đưa vào nội dung sau:
<h1>Danh sách thành viên</h1>
<div id="body"></div>
- Chúng ta thêm nút nhấn có tên “Add a New User” vào tập tin này:
<div class="add">
<?php
$lnkAdd = $this->url('admin',
array(
'controller'=>'index',
'action'=>'add'
));
$lnkAdd = '<a href="' . $lnkAdd . '">Add a New User</a>';
echo $lnkAdd;
?>
</div>
- Tiếp theo chúng hiển thị danh sách các user và các nút điều khiển như “Edit” và “Delete”
<table id='data'>
<tr class="title">
<td>ID</td>
<td>Username</td>
<td>Email</td>
<td>Group</td>
<td>Control</td>
</tr>
<?php
foreach ($this->users as $user){
$lnkEdit = $this->url('admin',
array(
'controller'=>'index',
'action'=>'edit',
'id' => $user->id
));
$lnkEdit = '<a href="' . $lnkEdit . '">Edit</a>';
$lnkDelete = $this->url('admin',
array(
'controller'=>'index',
'action'=>'delete',
'id' => $user->id
));
$lnkDelete = '<a href="' . $lnkDelete . '">Delete</a>';
$str = '';
$str .= '<tr>';
$str .= '<td class="txtCenter">' . $user->id . '</td>';
$str .= '<td><b>' . $user->username . '</b></td>';
$str .= '<td class="txtCenter">' . $user->email . '</td>';
$str .= '<td class="txtCenter">' . $user->group . '</td>';
$str .= '<td class="txtCenter">' . $lnkEdit . ' | ' . $lnkDelete .'</td>';
$str .= '</tr>';
echo $str;
}
?>
</table>
- Vậy nội dung của tập tin /module/Admin/view/admin/index/index.phtml sau khi thêm đầy đủ sẽ như
sau:
<h1>Danh sách thành viên</h1>
<div id="body">
<div class="add">
<?php
$lnkAdd = $this->url('admin',
array(
'controller'=>'index',
'action'=>'add'
));
$lnkAdd = '<a href="' . $lnkAdd . '">Add a New User</a>';
echo $lnkAdd;
?>
</div>
<table id='data'>
<tr class="title">
<td>ID</td>
<td>Username</td>
<td>Email</td>
<td>Group</td>
<td>Control</td>
</tr>
<?php
foreach ($this->users as $user){
$lnkEdit = $this->url('admin',
array(
'controller'=>'index',
'action'=>'edit',
'id' => $user->id
));
$lnkEdit = '<a href="' . $lnkEdit . '">Edit</a>';
$lnkDelete = $this->url('admin',
array(
'controller'=>'index',
'action'=>'delete',
'id' => $user->id
));
$lnkDelete = '<a href="' . $lnkDelete . '">Delete</a>';
$str = '';
$str .= '<tr>';
$str .= '<td class="txtCenter">' . $user->id . '</td>';
$str .= '<td><b>' . $user->username . '</b></td>';
$str .= '<td class="txtCenter">' . $user->email . '</td>';
$str .= '<td class="txtCenter">' . $user->group . '</td>';
$str .= '<td class="txtCenter">' . $lnkEdit . ' | ' . $lnkDelete .'</td>';
$str .= '</tr>';
echo $str;
}
?>
</table>
</div>
Chạy thử URL : localhost:8000/zf2basic/public/admin/
Download source here: http://www.zend.vn/download/pictures/zend-framework-2/05-thao-tac-voi-
database-trong-zf2/05-thao-tac-voi-database-01.zip
Để tìm hiểu kỹ hơn các bạn hãy truy cập:
Website: www.zend.vn
Facebook: facebook.com/zendvngroup
Youtube: youtube.com/user/luutruonghailan

More Related Content

What's hot

Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng web
Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng webBài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng web
Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng webMasterCode.vn
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupKhanhPham
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webMasterCode.vn
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPelearninglabvn
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webMasterCode.vn
 
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webBài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webMasterCode.vn
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTMasterCode.vn
 
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao KhanhPham
 
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webBài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webMasterCode.vn
 
tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5dvms
 
All zend
All zendAll zend
All zendkuetli
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressTài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressKhanhPham
 
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPTBài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPTMasterCode.vn
 

What's hot (20)

Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng web
Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng webBài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng web
Bài 3 Một số kỹ thuật lập trình PHP nâng cao - Xây dựng ứng dụng web
 
Web301 slide 4
Web301   slide 4Web301   slide 4
Web301 slide 4
 
Web301 slide 2
Web301   slide 2Web301   slide 2
Web301 slide 2
 
Joo
JooJoo
Joo
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress Meetup
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHP
 
Web301 slide 3
Web301   slide 3Web301   slide 3
Web301 slide 3
 
Web201 slide 6
Web201   slide 6Web201   slide 6
Web201 slide 6
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
 
Web301 slide 6
Web301   slide 6Web301   slide 6
Web301 slide 6
 
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webBài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
 
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
 
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webBài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
 
tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5
 
All zend
All zendAll zend
All zend
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressTài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
 
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPTBài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
 

Similar to Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8

TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7dvms
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc frameworkXuan Le
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
My sql part 2 - manager mysql server - backup & restore database
My sql   part 2 - manager mysql server - backup & restore databaseMy sql   part 2 - manager mysql server - backup & restore database
My sql part 2 - manager mysql server - backup & restore databaselaonap166
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcChe Linh Nguyen
 
DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5dvms
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-componentzzbabyloveszz
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 

Similar to Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8 (20)

Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1
 
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP Laravel
 
Zend db
Zend dbZend db
Zend db
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc framework
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
C5. Model, DataSharing.pdf
C5. Model, DataSharing.pdfC5. Model, DataSharing.pdf
C5. Model, DataSharing.pdf
 
My sql part 2 - manager mysql server - backup & restore database
My sql   part 2 - manager mysql server - backup & restore databaseMy sql   part 2 - manager mysql server - backup & restore database
My sql part 2 - manager mysql server - backup & restore database
 
Asp.net 3.5 _7
Asp.net 3.5 _7Asp.net 3.5 _7
Asp.net 3.5 _7
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvc
 
ôn tập dbms
ôn tập dbmsôn tập dbms
ôn tập dbms
 
Yii
YiiYii
Yii
 
DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5
 
Aspnet 3.5 -06
Aspnet 3.5 -06Aspnet 3.5 -06
Aspnet 3.5 -06
 
Asp.net 3.5 _8
Asp.net 3.5 _8Asp.net 3.5 _8
Asp.net 3.5 _8
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-component
 
Bài 6: Working with DATA
Bài 6: Working with DATABài 6: Working with DATA
Bài 6: Working with DATA
 
Mvc Model
Mvc ModelMvc Model
Mvc Model
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 

More from KhanhPham

Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtKhanhPham
 
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverGiáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverKhanhPham
 
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuTự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuKhanhPham
 
Học Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkHọc Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkKhanhPham
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)KhanhPham
 
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)KhanhPham
 
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)KhanhPham
 
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)KhanhPham
 
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)KhanhPham
 
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)KhanhPham
 
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)KhanhPham
 
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)KhanhPham
 
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)KhanhPham
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản KhanhPham
 

More from KhanhPham (14)

Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
 
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverGiáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
 
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuTự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
 
Học Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkHọc Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend Framework
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
 
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
 
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
 
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
 
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
 
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
 
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
 
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
 
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
 

Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8

  • 1. Thao tác Database trong Zend Framework 2 Xem 'Bài 7 - Nhúng template vào ứng dung ZF2 (P3)' trước khi thực hành bài này A. Xây dựng 'Admin' MODULE - Xây dựng MODULE có tên Admin với cấu trúc như sau: - Bây giờ chúng ta sẽ bắt đầu cấu hình MODULE này - Mở tập tin /config/application.config.php thêm vào đoạn mã khai báo MODULE mới <?php return array( 'modules' => array( 'Application', 'Template', 'Admin' ), 'module_listener_options' => array( 'module_paths' => array( './module', './vendor', ), 'config_glob_paths' => array( 'config/autoload/{,*.}{global,local}.php', ), ),
  • 2. ); - Mở tập tin /module/Admin/config/module.config.php đưa vào nội dung sau: <?php return array( 'controllers' => array( 'invokables' => array( 'AdminControllerIndex' => 'AdminControllerIndexController' ), ), 'router' => array( 'routes' => array( 'admin' => array( 'type' => 'segment', 'options' => array( 'route' => '/admin[/][:controller][/][:action][/][id/:id]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( '__NAMESPACE__' => 'AdminController' 'controller' => 'AdminControllerIndex', 'action' => 'index', ), ), ), ), ), 'view_manager' => array( 'template_path_stack' => array( 'admin' => __DIR__ . '/../view', ), ), ); - Mở tập tin /module/Admin/Module.php thêm vào nội dung sau: <?php namespace Admin; use ZendMvcModuleRouteListener; use ZendMvcMvcEvent; class Module { public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); } public function getConfig() {
  • 3. return include __DIR__ . '/config/module.config.php'; } public function getAutoloaderConfig() { return array( 'ZendLoaderStandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), ), ); } } - Mở tập tin /module/Admin/src/Admin/Controller/IndexController.php thêm vào nội dung sau: <?php namespace AdminController; use ZendMvcControllerAbstractActionController; use ZendViewModelViewModel; class IndexController extends AbstractActionController { public function indexAction() { echo '<br />' . __METHOD__; } } - Mở tập tin /module/Admin/view/admin/index/index.phtml thêm vào nội dung: <?php echo '<br/>' . __FILE__;?> - Mở tập tin /module/Admin/view/layout/layout.phtml thêm vào nội dung: <?php echo $this->doctype(); ?> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <h1>Hello Admin</h1> <?php echo $this->content; ?> </body> </html> - Chạy thử URL localhost:8000/zf2basic/public/admin/ chúng ta sẽ có giao diện sau:
  • 4. B. Tạo và kết nối với Database - Tạo một database có tên ‘zfbasic’ - Tạo một bảng ‘users’ có cấu trúc như sau CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(32) NOT NULL, `group` varchar(20) NOT NULL DEFAULT 'member', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ; - Thêm vào bảng ‘users’ một số record để làm dữ liệu tạm INSERT INTO `users` (`id`, `username`, `email`, `password`, `group`) VALUES (1, 'admin', 'admin@zend.vn', '123456', 'admin'), (2, 'manager', 'manager@zend.vn', '123456', 'admin'), (3, 'user', 'user@zend.vn', '123456', 'member'), (4, 'user01', 'user01@zend.vn', '123456', 'member'), (5, 'user02', 'user02@zend.vn', '123456', 'member'), (6, 'user03', 'user03@zend.vn', '123456', 'member'), (7, 'user04', 'user04@zend.vn', '123456', 'member'), (8, 'user05', 'user05@zend.vn', '123456', 'member'), (9, 'user06', 'user06@zend.vn', '123456', 'member'), (10, 'user07', 'user07@zend.vn', '123456', 'member'), (11, 'user08', 'user08@zend.vn', '123456', 'member'), (12, 'user09', 'user09@zend.vn', '123456', 'member'), (13, 'user10', 'user10@zend.vn', '123456', 'member'); - Bây giờ chúng ta sẽ bắt đầu cấu hình để kết nối Zend Framework với Database - Tạo thư mục /autoload trong thư mục /config. Thư mục này sẽ chứa các tập tin cấu hình và ứng dụng tự động load dựa vào đoạn mã trong tập tin /config/application.config.php //config_glob_paths: là một mảng chứa các tập tin cấu hình của ứng dụng
  • 5. 'config_glob_paths' => array( 'config/autoload/{,*.}{global,local}.php', ), - Tạo tập tin /config/autoload/global.php với nội dung sau: <?php return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zfbasic;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES 'UTF8'' ), ), 'service_manager' => array( 'factories' => array( 'ZendDbAdapterAdapter' => 'ZendDbAdapterAdapterServiceFactory', ), ), ); - Trong mảng này có 2 phần tử o ‘db’: Chứa mảng cấu hình kết nối đến hệ cơ sở dữ liệu MySQL o ‘service_manager’: là một phần tử để chứa cấu hình các thành phần Database, Models, table, Forms, filters, Authentication. - Tạo tập tin /config/autoload/local.php, tập tin này chứa thông tin username/password kết nối hệ cơ sở dữ liệu MySQL với nội dung sau: <?php return array( 'db' => array( 'username' => 'root', 'password' => '', ), ); - Sau khi chúng ta tạo 2 tập tin /config/autoload/global.php và /config/autoload/local.php thì 2 mảng cấu hình này sẽ được load vào ứng dụng. C. Tạo MODEL và truy xuất dữ liệu trong bảng user - Trong ZF2 việc truy xuất dữ liệu vẫn sử dụng MODEL nhưng nó được truy xuất qua đối tượng ZendServiceManagerServiceManager và đối tượng này sẽ không lấy dữ liệu khi luồng xử lý vẫn còn đang ở trong CONTROLLER và ACTION. Nó sẽ chỉ lấy dữ liệu ở ngoài VIEW mà thôi. - Trong MODEL của ZF2 chúng ta sẽ phải tạo ra 2 đối tượng đó là: o Đối tượng quản lý cấu trúc của bảng trong Database o Đối tượng tương tác với Database - Đầu tiên chúng ta sẽ tạo ra một thư mục tên /module/Admin/src/Admin/Model để chứa các tập tin tương
  • 6. tác đến database - Kế tiếp chúng ta sẽ tạo ra một đối tượng quản lý cấu trúc của bảng ‘users’ trong Database, tạo tập tin /module/Admin/src/Admin/Model/User.php có nội dung như sau: <?php namespace AdminModel; class User { public $id; public $username; public $email; public $password; public $group; public function exchangeArray($data) { $this->id = (!empty($data['id'])) ? $data['id'] : null; $this->username = (!empty($data['username'])) ? $data['username'] : null; $this->email = (!empty($data['email'])) ? $data['email'] : null; $this->password = (!empty($data['password'])) ? $data['password'] : null; $this->group = (!empty($data['group'])) ? $data['group'] : null; } } - Tiếp theo chúng ta tạo đối tượng tương tác với bảng ‘users’ này để lấy ra Database, tạo tập tin /module/Admin/src/Admin/Model/UserTable.php có nội dung như sau: <?php namespace AdminModel; use ZendDbTableGatewayTableGateway; class UserTable { protected $tableGateway; public function __construct(TableGateway $tableGateway) { $this->tableGateway = $tableGateway; } public function fetchAll() { echo __METHOD__; } } - Đối với ZF1 khi chúng ta có MODEL chúng ta có thể nhúng và chạy trực tiếp trong ACTION của CONTROLLER nhưng đối với ZF2 thì chúng ta sẽ phải chạy thông qua đối tượng ZendServiceManagerServiceManager vì vậy chúng ta sẽ thêm một số mã nguồn mới vào trong
  • 7. tập tin /module/Admin/Module.php - Thêm vào đầu tập tin một số namespace // Add these import statements: use AdminModelUserTable; use AdminModelUser; use ZendDbResultSetResultSet; use ZendDbTableGatewayTableGateway; - Tiếp theo chúng ta tạo một phương thức getServiceConfig() trong tập tin này với nội dung sau: public function getServiceConfig() { return array( 'factories' => array( // DB 'UserTableGateway' => function ($sm) { //Goi doi tuong ket noi voi Database $dbAdapter = $sm->get('ZendDbAdapterAdapter'); //Goi doi tuong giup chung ta chuyen 1 doi tuong mảng thanh mot doi tuong $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new User()); //$resultSetPrototype = null; //Dua cac gia tri 'users', $dbAdapter, $resultSetPrototype //vao doi tuong ZendDbTableGateway return new TableGateway('users', $dbAdapter, null, $resultSetPrototype); }, 'AdminModelUserTable' => function($sm) { //Luc nao UserTableGateway la mot doi tuong cua ZendDbTableGateway //chua cac gia tri ket noi den database va bang chung ta muon truy van $tableGateway = $sm->get('UserTableGateway'); //Truyen doi tuong ZendDbTableGateway vao trong ham __construct() //cua doi tuong AdminModelUserTable $table = new UserTable($tableGateway); return $table; }, ), ); } - Trong hàm trên chúng ta đã nạp một số đối tượng vào đối tượng ZendServiceManagerServiceManager khi chúng ta cần dùng đến các đối tượng trên có thể gọi thông qua đối tượng ZendServiceManagerServiceManager - Bây giờ chúng ta sẽ bắt đầu lấy dữ liệu của bảng users ra, theo những bước sau: - Mở tập tin /module/Admin/src/Admin/Model/UserTable.php sửa lại phương thức fetchAll() như sau: public function fetchAll() { //echo __METHOD__; return $this->tableGateway->select(); }
  • 8. - Mở tập tin /module/Admin/src/Admin/Controller/IndexController.php sửa lại indexAction() public function indexAction() { echo '<br />' . __METHOD__; $userTable = $this->getServiceLocator()->get('AdminModelUserTable'); return new ViewModel (array('users' => $userTable->fetchAll())); } - Mở tập tin /module/Admin/view/admin/index/index.phtml sửa lại trang như sau: <?php echo '<br/>' . __FILE__;?> <?php foreach ($this->users as $user){ echo "<pre>"; print_r($user); echo "</pre>"; } ?> - Chạy thử đường dẫn URL localhost:8000/zf2basic/public/admin/ D. Hiển thị dữ liệu - Bây giờ chúng ta sẽ xây dựng giao diện để hiển thị danh sách của các User lấy từ bảng ‘users’ trong database. - Tạo thư mục /css trong thư mục /public - Tạo tập tin /public/css/style.css, tập tin này có nội dung như sau:
  • 9. #data{ border-collapse:collapse; border:1px solid #ccc; width: 800px; } #data .title{ text-align: center; font-weight: bold; } #data td, th{ border:1px solid #ccc; padding: 3px; } #data .txtCenter{ text-align: center; } .add{ padding: 3px; margin: 3px 0px; font-weight: bold; } - Mở tập tin /module/Admin/view/layout/layout.phtml chỉnh sửa nội dung lại thành: <?php echo $this->doctype(); ?> <html lang="en"> <head> <meta charset="utf-8"> <?php echo $this->headLink()->prependStylesheet($this->basePath() . '/css/style.css');?> </head> <body> <?php echo $this->content; ?> </body> </html> Trong tập tin này chúng ta đã nhúng tập tin /public/css/style.css nên chúng ta sẽ sử dụng được các định dạng của tập tin style.css - Tiếp theo chúng ta sẽ cho danh sách hiển thị ở tập tin VIEW. - Mở tập tin /module/Admin/view/admin/index/index.phtml đưa vào nội dung sau: <h1>Danh sách thành viên</h1> <div id="body"></div> - Chúng ta thêm nút nhấn có tên “Add a New User” vào tập tin này: <div class="add"> <?php $lnkAdd = $this->url('admin',
  • 10. array( 'controller'=>'index', 'action'=>'add' )); $lnkAdd = '<a href="' . $lnkAdd . '">Add a New User</a>'; echo $lnkAdd; ?> </div> - Tiếp theo chúng hiển thị danh sách các user và các nút điều khiển như “Edit” và “Delete” <table id='data'> <tr class="title"> <td>ID</td> <td>Username</td> <td>Email</td> <td>Group</td> <td>Control</td> </tr> <?php foreach ($this->users as $user){ $lnkEdit = $this->url('admin', array( 'controller'=>'index', 'action'=>'edit', 'id' => $user->id )); $lnkEdit = '<a href="' . $lnkEdit . '">Edit</a>'; $lnkDelete = $this->url('admin', array( 'controller'=>'index', 'action'=>'delete', 'id' => $user->id )); $lnkDelete = '<a href="' . $lnkDelete . '">Delete</a>'; $str = ''; $str .= '<tr>'; $str .= '<td class="txtCenter">' . $user->id . '</td>'; $str .= '<td><b>' . $user->username . '</b></td>'; $str .= '<td class="txtCenter">' . $user->email . '</td>'; $str .= '<td class="txtCenter">' . $user->group . '</td>'; $str .= '<td class="txtCenter">' . $lnkEdit . ' | ' . $lnkDelete .'</td>'; $str .= '</tr>'; echo $str; } ?> </table> - Vậy nội dung của tập tin /module/Admin/view/admin/index/index.phtml sau khi thêm đầy đủ sẽ như sau:
  • 11. <h1>Danh sách thành viên</h1> <div id="body"> <div class="add"> <?php $lnkAdd = $this->url('admin', array( 'controller'=>'index', 'action'=>'add' )); $lnkAdd = '<a href="' . $lnkAdd . '">Add a New User</a>'; echo $lnkAdd; ?> </div> <table id='data'> <tr class="title"> <td>ID</td> <td>Username</td> <td>Email</td> <td>Group</td> <td>Control</td> </tr> <?php foreach ($this->users as $user){ $lnkEdit = $this->url('admin', array( 'controller'=>'index', 'action'=>'edit', 'id' => $user->id )); $lnkEdit = '<a href="' . $lnkEdit . '">Edit</a>'; $lnkDelete = $this->url('admin', array( 'controller'=>'index', 'action'=>'delete', 'id' => $user->id )); $lnkDelete = '<a href="' . $lnkDelete . '">Delete</a>'; $str = ''; $str .= '<tr>'; $str .= '<td class="txtCenter">' . $user->id . '</td>'; $str .= '<td><b>' . $user->username . '</b></td>'; $str .= '<td class="txtCenter">' . $user->email . '</td>'; $str .= '<td class="txtCenter">' . $user->group . '</td>'; $str .= '<td class="txtCenter">' . $lnkEdit . ' | ' . $lnkDelete .'</td>'; $str .= '</tr>'; echo $str; } ?> </table> </div> Chạy thử URL : localhost:8000/zf2basic/public/admin/
  • 12. Download source here: http://www.zend.vn/download/pictures/zend-framework-2/05-thao-tac-voi- database-trong-zf2/05-thao-tac-voi-database-01.zip Để tìm hiểu kỹ hơn các bạn hãy truy cập: Website: www.zend.vn Facebook: facebook.com/zendvngroup Youtube: youtube.com/user/luutruonghailan