> > > Zend framework 2.0 ebook, làm quen với Zend Framework 2

Zend framework 2.0 ebook, làm quen với Zend Framework 2

Zend Framework 2 (ZF2) vừa ra mắt với khá nhiều thay đổi trong cách cấu trúc dự án và thư viện, Các vấn đề liên quan đến phiên bản Zend Framework 2.0, Zend framework 2 cook book. Những bạn nào muốn tìm hiểu về zend có thể tham khảo bài viết dưới
Dương vật giả 2 Pin
 
Gel Bôi Trơn Durex Play Warming 100ml
 

Bán tài liệu zend framework gái rẻ (500k)

Yahoo: buctuonglua_12a8 - 0933.381.903

PHP – Làm quen với Zend Framework 2

Zend Framework 2 (ZF2) vừa ra mắt với khá nhiều thay đổi trong cách cấu trúc dự án và thư viện. Điều này mang đến nhiều điểm thuận lợi và hiệu quả hơn so với phiên bản Zend Framework 1. Trong bài này, ta sẽ cùng tìm hiểu một số đặc điểm của ZF2, cấu hình các thư viện và database.

Giới thiệu

Trang chủ: http://framework.zend.com/

ZF2 là một phiên bản thay đổi rất nhiều bởi việc sử dụng tính năng namespace của PHP 5.3 để tái cấu trúc lại thư viện Zend. Như vậy các tên lớp hay tập tin của ZF2 sẽ không dài ‘lòng thòng’ bằng cách ghép tên từng cấp thư mục lại với nhau nữa.
Trong ZF1, tập tin nằm ở cấp thư mục con thứ 4 thì tên của nó phải chứa 5 kí tự gạch dưới “_” (underscore), ví dụ như Zend_Db_Adapter_Pdo_Ibm_Db2. Trong ZF2, tập tin này chỉ cần đặt tên là Db2.
Cách sử dụng các lớp trong ZF2 cũng minh bạch hơn nhiều so với ZF1. Bạn sẽ cần dùng các từ khóa namespaceuse để khai báo một namespace và chỉ ra các lớp sẽ được sử dụng.
Trong ZF1, các lớp được sử dụng sẽ tự động được “mò” ra bằng cách dựa vào tên của chúng.
ZF2 thay thế việc sử dụng các tập tin .ini bằng các tập tin .php để cấu hình. Điều này có thể giúp tăng tốc độ của việc đọc cấu hình, bởi vì việc đọc và chuyển nội dung của tập tin .ini thành đối tượng trong PHP tất nhiên sẽ chiếm thời gian nhiều hơn việc lấy một mảng dữ liệu PHP có sẵn.

Zend Framework 2

Chi tiết hơn ta sẽ cùng tìm hiểu qua các bài viết riêng. Bây giờ, về cấu trúc dự án trong ZF2, đã có khá nhiều bài viết hướng dẫn nhưng tốt nhất bạn nên đọc qua bài Getting Started with Zend Framework 2 cùng với dự án mẫu https://github.com/zendframework/ZendSkeletonApplication. Theo đó, một dự án ZF2 sẽ có dạng như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
zf2-project/
    /config
        /autoload
        application.config.php
    /data
    /module
        /Foo
            /config
            /language
            /public
                /css
                /images
                /js
            /src
                /Foo
                    /Controller
                    /Form
                    /Model
            /view
                /foo
                    /index
                    /about
                /error
                /layout
            Module.php
    /public
        index.php
    /vendor
        /ZF2
            /library
                /Zend
    init_autoloader.php

Như bạn thấy, dự án này hỗ trợ nhiều module rõ ràng và hiệu quả hơn so với ZF1. Để ứng dụng chặt chẽ hơn, các module bạn tạo ra phải được khai báo trong config/application.config.php. Tại cấp module, các controller và router cũng phải được khai báo/định nghĩa để được phép sử dụng trong config/module.config.php. Mỗi module được quản lý bởi tập tin Module.php . Tập tin này có nhiệm vụ nạp các thông tin, cấu hình cần thiết để module hoạt động.

Why use Zend Framework

Thêm thư viện dùng chung

Với mục đích tạo một thư viện dùng để xác thực người dùng trên nhiều dự án, tôi tạo một thư viện có tên AAC (Authentication & Authorization Control) và đặt nó trong đường dẫn vendor/Core/library/AAC.
Trong module cần sử dụng thư viện này (ví dụ module Admin), bạn mở tập tin Module.php (module/Admin/Module.php) và xem nội dung của phương thức getAutoloaderConfig(). Đây là hàm dùng để nạp các namespace và lớp cần sử dụng trong module.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// module/Admin/Module.php
public function getAutoloaderConfig()
{
    return array(
        'ZendLoaderClassMapAutoloader' => array(
            __DIR__ . '/autoload_classmap.php',
        ),
        'ZendLoaderStandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}

Trong đó:
- ZendLoaderClassMapAutoloader: mảng này sẽ liệt kê các tập tin classmap, mỗi tập tin sẽ chứa một mảng các lớp cần được nạp.
- ZendLoaderStandardAutoloader: tự động nạp các phần tử trong module hiện tại trong thư mục src (__NAMESPACE__ là từ khóa chứa tên namespace hiện tại, ở đây là Admin).
Ta sẽ thêm một phần tử vào mảng ‘ZendLoaderStandardAutoloader’ để nạp các lớp trong thư viện ACC. Phương thức trên sẽ thành như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// module/Admin/Module.php
public function getAutoloaderConfig()
{
    return array(
        'ZendLoaderClassMapAutoloader' => array(
            __DIR__ . '/autoload_classmap.php',
        ),
        'ZendLoaderStandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                'AAC' => dirname(__DIR__) . '/../vendor/Core/library/AAC',
            ),
        ),
    );
}

Sử dụng nhiều kết nối dữ liệu

Thư viện AAC của tôi sẽ sử dụng một database riêng dùng để chứa các thông tin tài khoản, phân quyền,… Vì vậy khi được tích hợp vào các dự án khác, ta cần cấu hình thêm một kết nối database cho thư viện này.
Trong trường hợp này, tôi sẽ tạo một kết nối mới với tên aacdb bằng cách mở tập tin cấu hình của ứng dụng tại {my_project}/config/autoload/global.php. Sau đó thêm một phần tử mới:

1
2
3
4
5
6
7
8
9
10
11
12
13
// {my_project}/config/autoload/global.php
 return array(
     'aacdb' => array(
        'driver'         => 'Pdo',
         'dsn'            => 'mysql:dbname=test;host=localhost',
        'username'       => 'yinyang',
        'password'       => '987654321',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES 'UTF8''
        ),
    ),
   // ... other configs
);

Tiếp tục ta sẽ nạp dùng cấu hình này để tạo một kết nối (chính xác là một loại Data Adapter, nhưng bạn cũng có thể lưu trữ bất kì đối tượng nào khác) trong module Admin bằng cách thay đổi phương thức getServiceConfig() của tập tin Module.php.
Phương thức này sẽ trả về một mảng các cấu hình của ServiceManager dựa vào lớp ZendServiceManagerConfig. ServiceManager có thể hiểu là một đối tượng có nhiệm vụ lưu giữ các cấu hình để sử dụng cho module. Bạn có thể cấu hình ServiceManager này trong module.config.php hoặc Module.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// module/Admin/Module.php
public function getServiceConfig()
{
    return array(
        'factories' => array(
            'aacAdapter' =>  function($sm) {
                $config = $sm->get('config');
                $config = $config['aacdb'];
                $dbAdapter = new DbAdapter($config);
                return $dbAdapter;
            },
            // ...
        ),
 
    );
}

Khi cần lấy về accAdapter này, bạn có thể làm như sau trong Controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ...
 
class IndexController extends AbstractActionController
{
    protected $accAdapter;
 
    // ...
 
    public function getAacAdapter()
    {
        if (!$this->accAdapter) {
            $sm = $this->getServiceLocator();
            $this->accAdapter = $sm->get('aacAdapter');
        }
        return $this->adminTable;
    }
}

YinYangIt

Zend Framework 2.0: Hướng dẫn cài đặt ứng dụng đầu tiên

Ngày hôm qua (06-09-2012) Zend đã chính thức ra mắt bản Zend Framework 2.0 với nhiều cải tiến đáng kể. Điều đáng nói, thư viện hiện tại của zend framework 2.0 chỉ còn tầm 7mb. Trong khi ở phiên bản 1.x thì dung lượng thư viện lên tới 22mb. Điều này cho thấy, Zend kỳ vọng vào sự thay đổi và cố gắng tối ưu mọi thứ cho đứa con cưng ở phiên bản 2.0 này rất nhiều.

Có thể thấy qua quy trình và định hướng của phiên bản này khác rất nhiều so với bản 1.x. Và dĩ nhiên, kèm theo đó là sự khó tiếp cận với người chưa có kinh nghiệm làm việc với thư viện Zend Framework. QHOnline sẽ gửi đến các bạn loạt bài tìm hiểu Zend Framework 2.0 từ A-->Z trong thời gian tới.

Phạm vi bài viết này, tôi sẽ hưỡng dẫn cho các bạn những gì mà tôi đã nghiên cứu được trong khoảng thời gian ngắn ngủi vừa qua. Vì phiên bản mới nhất cũng vừa phát hành trong vài ngày gần đây, nên các tài liệu về ZF2.0 cũng rất hiếm hoi, nếu các bạn cũng đang nghiên cứu về ZF 2.0 thì hãy cùng chúng tôi góp ý và xây dựng kiến thức ZF2.0 ngày một hoàn chỉnh nhé.

Lưu ý:
+ Toàn bộ cấu hình và mã nguồn của bài này đều đã test trên phiên bản 2.0. Đối với những phiên bản cũ hơn thì sẽ không chạy được (kể cả phiên bản 1.x).
+ PHP yêu cầu trong hệ thống là từ 5.3.3 trở lên. Để chạy tốt, tôi khuyến cáo sử dụng xampp phiên bản 1.7.4 (tương đương PHP 5.3.5).

Khởi động zend Framework 2.0:
Đầu tiên, bạn cần chuẩn bị bộ source gốc của Zend Framework 2.0.
Bạn có thể truy cập và download theo đường link này:
https://github.com/zendframework/Zen...zipball/master
Khi giải nén bạn sẽ thấy cấu trúc như hình bên dưới:

Kế tới, bạn cần download phiên bản zend framework 2.0 tại đây:
http://framework.zend.com/downloads/latest

Sau đó giải nén và copy thư mục library vào thự mục vendor/ZF2 của chúng ta theo cấu hình ở trên.

+ Thư mục config: Chưa các file config chính cho hệ thống.
+ Thư mục data: Dùng để chứa dữ liệu và các file cache nếu chúng ta có dùng cache.
+ Thư mục vendor: Là thư mục dùng để chứa thư viện zend framework 2.0. Thư viện được chứa theo đường dẫn sau: vendor/ZF2/library/Zend
+ Thư mục Module: Là thư mục dùng để chứa các module của ứng dụng.
+ Thư mục Public: Là thư mục chứa các thông tin như css, js, images. Đồng thời chứa file index.php chính và .htaccess.

Trong thư mục public đã có sẵn thư mục js, css, images và file index.php, .htaccess. Đồng thời trong thư mục config cũng đã có sẵn file tên: application.config.php

Đây là file chứa thông tin cấu hình như khai báo module như khai báo module có trong hệ thống, khai báo thư viện vendor, cache,….

Kế tới chúng ta xem thư mục module có gì:

Thư mục module hiện tại sẽ có thư mục Application
Đây là module mặc định của hệ thống. Khi chạy ứng dụng ta sẽ có kết quả như sau:


Chạy ứng dụng đầu tiên với zend Framework 2.0:
Tại thư mục module tạo thư mục Home theo cấu trúc sau:

Module/
------/Home
------------/config
------------/view
----------------- /home
-----------------------/home
------------/src
-----------------/Home
-----------------------/Controller
-----------------------/Model
-----------------------/Form

Như bạn thấy đấy, ở Zend Framework 2.0. Ứng dụng được quản lý bằng một cơ chế module riêng biệt. Cụ thể là module manager. Khi đó, các ứng dụng sẽ được tách riêng biệt. Và chúng ta sẽ cấu hình từng module một chứ không gộp chung cấu hình tất cả module giống với Zend Framework 1.12. Vì thế, ở đây chúng ta phải tập làm quen với kiến trúc mới này.

Cụ thể:
Một module sẽ bao gồm 3 thư mục chính là config, view, src
+ config: chứa file cấu hình của module
+ view: Chưa các file view của module
+ src: Chứa các thành phần controller, model và form của module.

Tiếp tục ta tạo file Module.php trong module home. Với nội dung sau:

PHP Code:
namespace Home;
class 
Module
{
    public function 
getAutoloaderConfig()
    {
        return array(
            
'ZendLoaderClassMapAutoloader' => array(
                
__DIR__ '/autoload_classmap.php',
            ),
            
'ZendLoaderStandardAutoloader' => array(
                
'namespaces' => array(
                    
__NAMESPACE__ => __DIR__ '/src/' __NAMESPACE__,
                ),
            ),
        );
    }

    public function 
getConfig()
    {
        return include 
__DIR__ '/config/module.config.php';
    }
}

Mục đích của file này là để định nghĩa 2 phương thức getAutoloaderConfig() và getConfig().

File module.php này được xem như một module manager. Nó sẽ giúp hệ thống tự động gọi 2 phương thức trên.

Ở Phương thức getAutoloaderConfig() chúng ta cấu hình cho cơ chế autoloading hiểu hệ thống khi load dự trên cơ chế NameSpace của PHP 5.3

Phương thức getconfig() cho phép nạp nội dung module.config.php. Đây là file chứa thông tin cấu hình chính của module. Ví dụ như: Khai báo để hệ thống hiểu module, kết nối,…

Tạo tiếp file autoload_classmap.php với nội dung:

PHP Code:
return array(
);

Nhiệm vụ của file này là trả về một mảng dữ liệu rỗng.
Tạo tiếp file module.config.php trong thư mục config của home:
Home/config/module.config.php với nội dung:

PHP Code:
return array(
    
'controllers' => array(
        
'invokables' => array(
            
'HomeControllerHome' => 'HomeControllerHomeController',
        ),
    ),
    
'view_manager' => array(
        
'template_path_stack' => array(
            
'home' => __DIR__ '/../view',
        ),
    ),
);

Đây là file cấu hình thông tin chính của chúng ta. Tại đây có 2 phần cần quan tâm là controller và view_manager. Với controller ta chỉ ra các controller tồn tại trong ứng dụng. Với view_manager ta chỉ ra đường dẫn tới view của chúng trong ứng dụng.
Tiếp tục trong src/Home/Controller tạo file tên HomeController.php với nội dung:

PHP Code:
namespace HomeController;

use 
ZendMvcControllerAbstractActionController;
use 
ZendViewModelViewModel;

class 
HomeController extends AbstractActionController
{
    public function 
indexAction()
    {
        return array(
                    
'welcome' => 'Hello Zend Framework 2.0 - By QHOnline.Info',
                );
    }
}

Tiếp tục, trong thư mục view/home/home tạo file index.phtml với nội dung như sau

PHP Code:
echo $welcome?>

Sau khi đã tạo view và controller. Ta cần khai báo cho hệ thống module biết về thông tin controller mà chúng ta vừa tạo. Cũng như URL để zend framework hiểu sự tồn tại của chúng. Mở file module.config.php trong thư mục home/config
Sửa lại với nội dung sau:

PHP Code:
return array(
    
'controllers' => array(
        
'invokables' => array(
            
'HomeControllerHome' => 'HomeControllerHomeController',
        ),
    ),
    
    
// The following section is new and should be added to your file
    
'router' => array(
        
'routes' => array(
            
'home' => array(
                
'type'    => 'segment',
                
'options' => array(
                    
'route'    => '/home[/:action][/:id]',
                    
'constraints' => array(
                        
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        
'id'     => '[0-9]+',
                    ),
                    
'defaults' => array(
                        
'controller' => 'HomeControllerHome',
                        
'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),    
    
    
'view_manager' => array(
        
'template_path_stack' => array(
            
'home' => __DIR__ '/../view',
        ),
    ),
);

Nếu bạn để ý kỹ sẽ thấy, ta chỉ thêm mỗi đoạn khai báo router vào mà thôi.

PHP Code:
    'router' => array(
        
'routes' => array(
            
'home' => array(
                
'type'    => 'segment',
                
'options' => array(
                    
'route'    => '/home[/:action][/:id]',
                    
'constraints' => array(
                        
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        
'id'     => '[0-9]+',
                    ),
                    
'defaults' => array(
                        
'controller' => 'HomeControllerHome',
                        
'action'     => 'index',
                    ),
                ),
            ),
        ),
    ), 

Zend Framework 2.0 không tự động hiểu như phiên bản 1.12. Mà chúng ta phải thiết lập và cấu hình thì nó mới hiểu được sự tồn tại của các controller khi ta gọi.

Sau cùng, ta phải khai báo cho ứng dụng của zend sự tồn tại của module home. Bởi việc mở file theo đường dẩn: zf2.0/config/application.config.php
Tại đây ta thêm vào dòng sau:

PHP Code:
return array(
    
'modules' => array(
        
'Application',
        
'Home'  // Đây là dòng ta thêm vào để khai báo module home.
    
),
    
'module_listener_options' => array(
        
'config_glob_paths'    => array(
            
'config/autoload/{,*.}{global,local}.php',
        ),
        
'module_paths' => array(
            
'./module',
            
'./vendor',
        ),
    ),
);

Sau cùng chạy ứng dụng:
http://localhost/zf2.0/public/home
và kết quả sẽ hiển thị như mong đợi.

Như vậy, qua ví dụ này. Các bạn đã hiểu được quy trình làm việc cơ bản của zend framework 2.0 rồi phải không nào. Ghi chú lại vài điểm nào:
+ Zend cấu hình theo từng module.
+ Zend sử dụng router để chạy từng controller.
+ Zend sử dụng thư mục view bên ngoài để tương tác.
+ Zend sử dụng yếu tố truyền tham số từ controller sang view có nét tương đồng với codeigniter (truyền tham số dưới dạng mảng và tại view đã qua 1 lần duyệt giá trị).
+ Zend sử dụng namespace làm nền tảng thể hiện kiến trúc linh động.
+ Và cuối cùng là, có vẻ hơi khó học phải không nào. Kiên nhẫn lên bạn nhé

(Bùi Quốc Huy)

Bán tài liệu zend framework gái rẻ (500k)

Yahoo: buctuonglua_12a8 - 0933.381.903