Thứ Năm, 18 tháng 6, 2015

Component trong CakePHP Framework

Component trong CakePHP Framework là những thành phần mở rộng. Cho phép người sử dụng tùy biến và sử dụng nó linh hoạt.Ví dụ một số component trong CakePHP Framework mà chúng ta thường dùng như: ACL (phân quyền), mail, time, security…

Ngoài ra, CakePHP cũng cho phép người sử dụng tùy biến hoặc viết riêng một component để phục vụ cho ứng dụng của mình. Để sử dụng các component trong CakePHP Framework, trong controller ta khai báo :
<?php
   var $components=array('Acl',’Mail’);
?>
Cách đặt tên cho Component
Tên class helper = tên component + "component"

Ví dụ: Muốn tạo một component có tên là Demo thì class tương ứng là DemoComponent và tên file là demo.php được đặt trong thư mục app/controllers/components. Và chức năng của component này là loại bỏ dấu tiếng Việt các bài viết mà tôi nhận được từ user. Ta làm như sau :

<?php
 class DemoComponent extends Object{
    function initialize(&$controller, $settings = array()) {
        $this->controller =& $controller;
    }
    function startup(&$controller) {
    }
    function beforeRender(&$controller) {
    }
    function shutdown(&$controller) {
    }
    function beforeRedirect(&$controller, $url, $status=null, $exit=true) {
    }
    function redirectSomewhere($value) {}

   function unicode_convert($str){
    if(!$str) return false;
    $unicode = array(
      'a'=>array(
      'á','à','ả','ã','ạ','ă','ắ','ặ','ằ','ẳ','ẵ','â','ấ','ầ','ẩ','ẫ','ậ'),
      'A'=>array(
      'Á','À','Ả','Ã','Ạ','Ă','Ắ','Ặ','Ằ','Ẳ','Ẵ','Â','Ấ','Ầ','Ẩ','Ẫ','Ậ'),
      'd'=>array('đ'),
      'D'=>array('Đ'),
      'e'=>array('é','è','ẻ','ẽ','ẹ','ê','ế','ề','ể','ễ','ệ'),
      'E'=>array('É','È','Ẻ','Ẽ','Ẹ','Ê','Ế','Ề','Ể','Ễ','Ệ'),
      'i'=>array('í','ì','ỉ','ĩ','ị'),
      'I'=>array('Í','Ì','Ỉ','Ĩ','Ị'),
      'o'=>array(
      'ó','ò','ỏ','õ','ọ','ô','ố','ồ','ổ','ỗ','ộ','õ','ớ','ờ','ở','ỡ','ợ'),
      '0'=>array(
      'Ó','Ò','Ỏ','Õ','Ọ','Ô','Ố','Ồ','Ổ','Ỗ','Ộ','Õ','Ớ','Ờ','Ở','Ỡ','Ợ'),
      'u'=>array('ú','ù','ủ','ũ','ụ','ý','ứ','ừ','ử','ữ','ự'),
      'U'=>array('Ú','Ù','Ủ','Ũ','Ụ','Ý','Ứ','Ừ','Ử','Ữ','Ự'),
      'y'=>array('ý','ỳ','ỷ','ỹ','ỵ'),
      'Y'=>array('Ý','Ỳ','Ỷ','Ỹ','Ỵ'),
      '-'=>array(' ','.','/',''','’','(',')',',','!','"','"','"','%','&','@','#','$'),
    );
   foreach($unicode as $nonUnicode=>$uni){
    foreach($uni as $value)
     $str = str_replace($value,$nonUnicode,$str);
    }
     return $str;
   }
}
?>

Tiếp theo tạo 1 Controller tên Testdemos (app/controllers/ testdemos _controller.php) có nội dung như sau :
<?php
 class TestdemosController extends AppController {
    var $components = array("Demo");
   
    function test_component(){
        $string = "Thế Giới WEB - thegioiweb.net.vn";
        $data = $this->Demo->unicode_convert($string);
        $this->set("data",$data);
 }
?>

Tạo file test_component.ctp trong thư mục app/views/testdemos có nội dung hiển thị dữ liệu từ controller testdemo_controller.php
<?php
  echo $data;
?>
Truy cập tới controller testdemos/test_component để kiểm tra kết quả.

Lưu ý: Khi lập trình PHP, trong các component được khai báo trong controller nào thì chỉ được sử dụng trong controller đó. Tuy nhiên để sử dụng chúng ở mọi nơi thì ta giải quyết như sau:

Tạo file app_controller.php đặt trong thư mục app với nội dung :
<?php
  class AppController extends Controller {
     var $components=array('Acl',’Mail’);
}

Mọi thứ đặt trong AppController sẽ có tác dụng trên toàn bộ các Controller khác, do đó ta chỉ cần khai báo :
var $components=array('Acl',’Mail’);

SHARE THIS

0 nhận xét:

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.