Scaffolding
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
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
Bài viết mới
- CakePHP version 1.3.12
- Tạo chuỗi ngẫu nhiên với 1 dòng code
- Kỹ thuật “bit field” trong phân quyền
- Làm việc với File và Folder
- CakePHP 1.3.8
- CakePHP 1.3.7 Released
- Ajax trong CakePHP
- Tạo và load file config trong CakePHP
- Làm site đa ngôn ngữ với CakePHP (Phần 1)
- CakePHP 1.3.6 and 1.2.9 released
- CakePHP 1.3.5 released
- Type hinting trong PHP
- CakePHP ra phiên bản mới 1.3.4
- Tích hợp Zend framework vào CakePHP
- Tạo virtual host trên local
- Sử dụng Acl trong cakephp – Phần 2
- Sử dụng Acl trong cakephp – Phần 1
- Sinh code tự động với cake console
- Tự động xóa record ở bảng con khi reocord ở bảng cha bị xóa
- Xác thực người dùng với component Auth
Thảo luận mới
- admin on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- hanh on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng Acl trong cakephp – Phần 1
- admin on Sử dụng session trong CakePHP
- Bich Yen on Sử dụng session trong CakePHP
TAG
Calendar
Lưu trữ
- September 2011 (3)
- July 2011 (1)
- March 2011 (1)
- February 2011 (1)
- November 2010 (4)
- October 2010 (1)
- September 2010 (2)
- August 2010 (9)
- July 2010 (9)
- June 2010 (22)
Blogroll
- Bakery
- Biển đảo Việt Nam
- CakePHP
- CakePHP Google Group
- CakePHP Manual
- CakePHP Questions
- Diễn đàn CakePHP VN

admin




