Hello cả nhà!
Hôm nay tôi xin giới thiệu với mọi người về cách sử dụng plugin trong cakephp. Như mọi người đều biết, cakephp là một framework hỗ trợ lập trình php một cách nhanh chóng và hiệu quả nhất. Sử dụng cakephp sẽ làm tăng tốc độ phát triển các dự án lên nhiều lần. Trong quá trình phát triển dự án, việc sử dụng đi sử dụng lại các đoạn code viết sẵn là đỉều tất yếu. Vậy sử dụng lại code như thế nào cho hiệu quả cũng là một bài toán đáng để quan tâm. Nếu như mọi người cứ copy nguyên code các dự án đã có rồi phát triển nên, sẽ làm cho code ngày càng nhiều khó quản lý và tái sử dụng ở các lần sau. Với cakephp, việc tái sử dụng code sẽ trở nên đơn giản hơn thông qua sử dụng tiện ích plugin. Các module chức năng sẽ được tách riêng ra thành các plugin, và khi sử dụng module chức năng nào, ta chỉ việc đưa plugin đó vào trong cakephp mà thôi. Việc sử dụng plugin sẽ làm cho các chức năng trở nên rõ ràng, tách biệt và dễ quản lý, maintain cũng như phát triên nên.
Việc tạo một plugin trong cakephp vô cùng đơn giản và dễ hiểu. Để tạo ra một plug, chúng ta sẽ đưa vào trong thư mục app/plugins. Ví dụ sau đây chúng ta sẽ tạo ra một plugin tin tức với các chức năng thêm sửa xóa. Đâu tiên sẽ là tạo ra CSDL tên là plugin trong đó có bảng news:
CREATE TABLE IF NOT EXISTS `news` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`description` text,
`content` text,
`created` datetime DEFAULT NULL,
`user_id` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
CREATE TABLE IF NOT EXISTS `users` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Việc cấu hình database kết nối đến CSDL mới tạo tôi sẽ để mọi người tự làm nhé (Đây là công việc cơ bản mà ^_^ ). Tiếp theo ta sẽ tạo ra một plugin tintuc bằng cách thêm một thư mục tintuc như sau : app/plugins/tintuc . Cấu trúc bên trong thư mục tin tức sẽ giống hệt như là cấu trúc bên trong thư mục app. Ta sẽ có một thư thư mục cơ bản cần thiết như sau:
+ Thư mục controller như sau: app/plugins/tintuc/controllers.
+ Thư mục view như sau: app/plugins/tintuc/view
+ Thư mục models như sau: app/plugins/tintuc/models
+ Thư mục layout như sau: app/plugins/tintuc/layouts
+ Thư mục helpers như sau: app/plugins/tintuc/view/helpers
+ Thư mục components như sau: app/plugins/tintuc/controllers/components
+ Tệp tin TintucAppController: app/plugins/tintuc/tintuc_app_controller.php
+ Tệp tin TintucAppModel: app/plugins/tintuc/tintuc_app_model.php
+ …………………………………
Như đã thấy ở trên, cấu trúc các thư mục trong plugin sẽ tương tự như cấu trúc thư mục như trong phần app. Riêng 2 file tintuc_app_controller.php và tintuc_app_model.php sẽ có nội dung như sau:
//app/plugins/tintuc/tintuc_app_controller.php //app/plugins/tintuc/tintuc_app_model.php
Tiếp theo ta sẽ khai báo một news_controllers theo app/plugins/tintuc/controllers/news_controller.php
News->recursive = 0; $this->paginate = array('limit' => 15, 'page' => 1, 'order' => array('News.created' => 'desc')); $this->set ('news', $this->paginate ('News')); } function add() { $this->layout = 'homepage'; if(! empty ($this->data)) { $this->News->create (); if($this->News->save ($this->data)) { $this->Session->setFlash (__ ('The News has been saved', true)); $this->redirect ('/tintuc/news/index'); }else { $this->Session->setFlash (__ ('The News could not be saved. Please, try again.', true)); } } } function edit($id = null) { if(! $id && empty ($this->data)) { $this->Session->setFlash (__ ('Invalid News', true)); $this->redirect (array('action' => 'index')); } $news = $this->News->read (null, $id); if(! empty ($this->data)) { if($this->News->save ($this->data)) { $this->Session->setFlash (__ ('The News has been saved', true)); $this->redirect ('/tintuc/news/index'); }else { $this->Session->setFlash (__ ('The News could not be saved. Please, try again.', true)); } } if(empty ($this->data)) { $this->data = $news; } } function delete($id = null) { if(! $id) { $this->Session->setFlash (__ ('Invalid id for News', true)); $this->redirect ('/tintuc/news/index'); } $del_news = $this->News->findById ($id); if($this->News->del ($id)) { $this->Session->setFlash (__ ('News deleted', true)); $this->redirect ('/tintuc/news/index'); } } } ?>
Khai báo tiếp một file model news.php theo đường dẫn app/plugins/tintuc/models/news.php
Vậy là đã xong controller và model. Giờ tôi sẽ tạo ra 3 view là index, add và edit
//app/plugins/tintuc/views/news/add.ctp create('News', array('url' => '/tintuc/news/add')); echo $form->input('title'); echo $form->input('description'); echo $form->input('created'); echo $form->input('content'); echo $form->end('Submit'); ?> //app/plugins/tintuc/views/news/edit.ctp create('News'); echo $form->hidden('id'); echo $form->input('title'); echo $form->input('description'); echo $form->input('created'); echo $form->input('content'); echo $form->end('Submit'); ?> //app/plugins/tintuc/views/news/index.ctpIndex
Title | User | Created | Action |
---|---|---|---|
=$n['News']['title']?> | =$n['User']['name']?> | =$n['News']['created']?> | =$html->link('Edit', '/tintuc/news/edit/'.$n['News']['id']);?> =$html->link('Delete', '/tintuc/news/delete/'.$n['News']['id'], null, sprintf(__('Are you sure you want to delete # %s?', true), $n['News']['id']));?> |
Tôi đã vừa hoàn thành một plugin cơ bản trong cakephp. Bây giờ tôi sẽ lấy dữ liệu từ plugin thông qua một test_controller như sau:
//app/controllers/tests_controllers.php News->find('all')); die(); } } ?>
Trong plugin ta còn có thể tạo ra các components, helpers, layouts riêng cho mình. Các file này sẽ nằm ở các thư mục tương ứng trong plugins. Việc tao ra các class components, helpers, layout tương tự như thêm components, helpers hoặc layout bình thường. Sử dụng các components, helpers, layouts trong controller như sau:
var $components = array('Tintuc.Comp');
Như vậy là ta chỉ thêm tên các plugin phía trước các components và helper mà thôi, riêng với layout tao khai báo như bình thương, vì nó sẽ mặc định là chồng đề lên thư mục app/views/layouts.
var $layout = 'temp_layout';
Việc chỉ định sử dụng các file javascript, css và ảnh sẽ được lưu vào trong các thư mục tương ứng là tintuc/vendors/js
, tintuc/vendors/css
and tintuc/vendors/img
và sẽ được gọi như sau:
image('/tintuc/img/my_image.png'); ?> css('/tintuc/css/my_css'); ?> link('/tintuc/js/do_cool_stuff'); ?>
Tôi đã trình bày mọi thứ cơ bản liên quan đến plugin với mọi người rồi, giờ mọi người hãy tự trải nghiêm nhé. Chúc cả nhà vui vẻ @(^_^)@.
(i-php.net)