Jun
21

Scaffolding

Author admin    Category Manual     Tags

Kỹ thuật Scaffolding cho phép các lập trình viên định nghĩa và tạo ra một ứng dụng cơ bản với các chức năng như: thêm, cập nhật, xóa, truy vấn dữ liệu. Scaffolding trong CakePHP cũng đồng thời cho phép các lập trình viên định nghĩa mối quan hệ giữa các đối tượng, tạo hoặc hủy các mối quan hệ này.

1. Thực hiện ví dụ như sau:

- Có 2 table: product_categories và products. Quan hệ 1-nhiều.

--
-- Table structure for table `product_categories`
--
 
CREATE TABLE IF NOT EXISTS `product_categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
--
-- Table structure for table `products`
--
 
CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category_id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

Bạn hãy chạy các đoạn sql trên trong csdl test_cake. Tôi sẽ dùng các table này cho các bài viết tiếp theo!

- Bây giờ chúng ta sẽ xây dựng một ứng dụng nho nhỏ, cho phép thêm, sửa, xóa, xem chi tiết danh mục sản phẩm, sản phẩm. Scaffolding sẽ giúp ta làm điều này trong vòng chưa tới 5 phút!

Các bước thực hiện:

1. Sau khi tạo 2 table như đã nói ở trên, bạn tạo controller cho danh mục sản phẩm và sản phẩm (file product_categories_controller.php và product_controller.php lưu trong app/controllers). Code:

<?php
class ProductCategoriesController extends AppController {	
 
	var $scaffold;
}
?>
<?php
class ProductsController extends AppController {	
 
	var $scaffold;
}
?>

2. Tạo 2 model Product và ProductCategory

app/models/product.php

<?php
class Product extends AppModel {
 
	var $name = 'Product';
 
	var $belongsTo = array(
        'ProductCategory' => array(
            'className'    => 'ProductCategory',
            'foreignKey'    => 'category_id'
        )
    );
 
 
}
?>

app/models/product_category.php

<?php
class ProductCategory extends AppModel {
 
	var $name = 'ProductCategory';
 
	var $hasMany = array(
		'Product' =>
    	array('className' => 'Product',
                         'conditions'    => '',
                         'order'         => '',
                         'limit'         => '',
                         'foreignKey'    => 'category_id',
                         'dependent'     => true,
                         'exclusive'     => false,
                         'finderQuery'   => '',
                         'fields'        => '',
                         'offset'        => '',
                         'counterQuery'  => ''
    )
  );
}
?>

Mục đích của việc tạo model là để chúng ta định nghĩa mối quan hệ cho 2 bảng trên.

3. Gõ lên trình duyệt link: http://localhost/test/cakephp1.3.2/product_categories

- Thật ngạc nhiên, chúng ta đã có 1 trang quản lý danh mục sản phẩm, sản phẩm với đầy đủ tính năng: thêm, sửa, xóa, xem chi tiết, phân trang, sorting. Sở dĩ có điều này bởi trong controller ta đã khai báo dùng Scaffolding thông qua biến $scaffold

Danh mục sp

Sản phẩm

Thêm danh mục

Thêm sản phẩm

Bạn hãy thử xem có ra kết quả như tôi không nhé, có gì thắc mắc hãy comment phía dưới!

2. Scaffold cho khu vực ảo

- Trong bài viết: Giải thích một số cấu hình trong file core.php tôi có đề cập tới Routing.prefixes. Lấy lại ví dụ trên, giờ tôi muốn dùng link http://localhost/test/cakephp1.3.2/admin/product_categories thay cho link http://localhost/test/cakephp1.3.2/product_categories để xem các giao diện Scaffold lúc nãy.

- Trước hết, cầu thiết lập giá trị cho Routing.prefixes trong core.php là ‘admin‘. Sau đó, trong ProductCategories và Product controller, khai báo lại biến $scaffold như sau:

var $scaffold = 'admin';

Như vậy là ta đã có thể truy xuất link: http://localhost/test/cakephp1.3.2/admin/product_categories

Điều này hữu ích khi ta muốn các thao tác quản trị nằm trong khu vực mà chỉ ta mới truy xuất được (cần làm thêm phần login khi vào admin – sẽ bàn sau). Tất nhiên, bây giờ không thể đi tới link http://localhost/test/cakephp1.3.2/product_categories, sẽ báo lỗi –> cùng một lúc chỉ có thể dùng scaffold tại 1 khu vực!

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

June 2010
M T W T F S S
    Jul »
 123456
78910111213
14151617181920
21222324252627
282930  

Lưu trữ

Blogroll

Thống kê

3 khách