Ngoài ra, để thực hiện những mục đích riêng biệt. CakePHP cũng cho phép người sử dụng tự thêm thắt 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 có sẵn trong CakePHP Framework, trong controller ta khai báo:
1
2
3
| <?php var $components = array ( 'Acl' ,’Mail’); ?> |
Cách đặt tên cho 1 Class Component :
Tên lớp helper = tên comonent + "Component"
Component mà tôi muốn tạo ra có tên là Common, class tương ứng là CommonComponent và file tương ứng là common.php (app/controllers/components/common.php)
Nội dung file common.php 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
33
| <?php class CommonComponent extends Object{ 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 ; } } ?> |
Warning (2): call_user_func_array() [function.call-user-func-array]:…
Thêm vào Class Component của bạn dòng code dưới đây :
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
| //called before Controller::beforeFilter() function initialize(& $controller , $settings = array ()) { // saving the controller reference for later use $this ->controller =& $controller ; } //called after Controller::beforeFilter() function startup(& $controller ) { } //called after Controller::beforeRender() function beforeRender(& $controller ) { } //called after Controller::render() function shutdown(& $controller ) { } //called before Controller::redirect() function beforeRedirect(& $controller , $url , $status =null, $exit =true) { } function redirectSomewhere( $value ) { // utilizing a controller method } |
(app/controllers/components/common.php)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| <?php class CommonComponent extends Object{ //called before Controller::beforeFilter() function initialize(& $controller , $settings = array ()) { // saving the controller reference for later use $this ->controller =& $controller ; } //called after Controller::beforeFilter() function startup(& $controller ) { } //called after Controller::beforeRender() function beforeRender(& $controller ) { } //called after Controller::render() function shutdown(& $controller ) { } //called before Controller::redirect() function beforeRedirect(& $controller , $url , $status =null, $exit =true) { } function redirectSomewhere( $value ) { // utilizing a controller method } // Ham chuyen doi tieng viet sang khong dau 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 ( 'Ý' , 'Ỳ' , 'Ỷ' , 'Ỹ' , 'Ỵ' ), ); foreach ( $unicode as $nonUnicode => $uni ){ foreach ( $uni as $value ) $str = str_replace ( $value , $nonUnicode , $str ); } return $str ; } } ?> |
Tôi tạo 1 Controller tên Testcommons (app/controllers/ testcommons _controller.php) sử dụng lớp Comonent Common vừa tạo
1
2
3
4
5
6
7
8
9
10
| <?php class TestcommonsController extends AppController { var $components = array ( "Common" ); function test_component(){ $string = "Diễn đàn QHonline . Nơi khơi nguồn các mã nguồn mở " ; // chuỗi ban đầu $data = $this ->Common->unicode_convert( $string ); // dữ liệu sau khi chuyển đổi không dấu $this ->set( "data" , $data ); // gán dữ liệu để hiển thị bên view } ?> |
1
2
3
| <?php echo $data ; ?> |
Chú ý :
Biến $components được khai báo trong Controller nào thì chỉ dùng được trong Controller đó
Nếu tôi khai báo trong Controller NewsController thì sang trang Controller Product, dùng $this->Common->unicode_convert() sẽ bị báo lỗi ngay! Như vậy không áp dụng được tính chất “dùng mọi lúc, mọi nơi” .
Nhưng không sao, ta có thể giải quyết vấn đề này bằng cách:
- Tạo file app_controller.php đặt trong thư mục app, nội dung file này như sau:
1
2
3
| class AppController extends Controller { var $components = array ( 'Acl' ,’Mail’); } |
1
| var $components = array ( 'Acl' ,’Mail’); |
0 nhận xét:
Đăng nhận xét