1. Trang chủ
  2. » Công Nghệ Thông Tin

CakePHP Framework: Cách viết 1 component trong CakePHP pot

14 299 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cakephp Framework: Cách Viết 1 Component Trong Cakephp
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại bài viết
Định dạng
Số trang 14
Dung lượng 182,38 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CakePHP Framework: Cách viết 1 component trong CakePHP... Chẳng hạn như một số component hữu ích trong cakePHP mà chúng ta thường dùng như: ACL phân quyền, mail, time, security,.... Cake

Trang 1

CakePHP Framework: Cách viết 1 component trong

CakePHP

Trang 2

Component là những thành phần mở rộng trong CakePHP Framework Cho phép người sử dụng tùy biến và sử dụng nó linh hoạt Chẳng hạn như một số component hữu ích trong cakePHP mà chúng ta thường dùng như: ACL

(phân quyền), mail, time, security,

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 <?php

2 var $components=array('Acl',’Mail’);

3 ?>

Giả sử tôi muốn loại bỏ dấu tiếng Việt các bài viết mà tôi nhận được từ user, không chỉ các bài bình luận về sản phẩm mà cả các bài bình luận về dự án, về hình ảnh nào đó trong website của tôi…

Trang 3

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)

Trang 4

Nội dung file common.php như sau:

01 <?php

02 class CommonComponent extends Object{

03 function unicode_convert($str){

04 if(!$str) return false;

05 $unicode = array(

06 'a'=>array(

07 'á','à','ả','ã','ạ','ă','ắ','ặ','ằ','ẳ','ẵ','â','ấ','ầ','ẩ','ẫ','ậ'),

08 'A'=>array(

09 'Á','À','Ả','Ã','Ạ','Ă','Ắ','Ặ','Ằ','Ẳ','Ẵ','Â','Ấ','Ầ','Ẩ','Ẫ','Ậ'),

10 'd'=>array('đ'),

Trang 5

11 'D'=>array('Đ'),

12 'e'=>array('é','è','ẻ','ẽ','ẹ','ê','ế','ề','ể','ễ','ệ'),

13 'E'=>array('É','È','Ẻ','Ẽ','Ẹ','Ê','Ế','Ề','Ể','Ễ','Ệ'),

14 'i'=>array('í','ì','ỉ','ĩ','ị'),

15 'I'=>array('Í','Ì','Ỉ','Ĩ','Ị'),

16 'o'=>array(

17 'ó','ò','ỏ','õ','ọ','ô','ố','ồ','ổ','ỗ','ộ','õ','ớ','ờ','ở','ỡ','ợ'),

18 '0'=>array(

19 'Ó','Ò','Ỏ','Õ','Ọ','Ô','Ố','Ồ','Ổ','Ỗ','Ộ','Õ','Ớ','Ờ','Ở','Ỡ','Ợ'),

20 'u'=>array('ú','ù','ủ','ũ','ụ','ý','ứ','ừ','ử','ữ','ự'),

21 'U'=>array('Ú','Ù','Ủ','Ũ','Ụ','Ý','Ứ','Ừ','Ử','Ữ','Ự'),

22 'y'=>array('ý','ỳ','ỷ','ỹ','ỵ'),

23 'Y'=>array('Ý','Ỳ','Ỷ','Ỹ','Ỵ'),

24 '-'=>array(' ','.','/',''','’','(',')',',','!','"','"','"','%','&','@','#','$'),

25 );

26 foreach($unicode as $nonUnicode=>$uni){

Trang 6

27 foreach($uni as $value)

28 $str = str_replace($value,$nonUnicode,$str);

29 }

30 return $str;

31 }

32 }

33 ?>

Tuy nhiên ,code bạn vẫn chạy được nhưng sẽ nhận được thông báo lỗi như sau :

Warning (2): call_user_func_array() [function.call-user-func-array]:…

Ít nhiều một số bạn sử dụng các component được chia sẽ trên mạng và cũng

sẽ gặp lỗi như vậy Mà trong khi đó tác giả lại không nhắc đến cách khắc phục , có lẽ một phần họ cho là kiến thức căn bản của chúng ta đã nắm vững .Nhưng không sao, cách phục như sau :

Thêm vào Class Component của bạn dòng code dưới đây :

01 //called before Controller::beforeFilter()

Trang 7

02 function initialize(&$controller, $settings = array()) {

03 // saving the controller reference for later use

04 $this->controller =& $controller;

05 }

06

07 //called after Controller::beforeFilter()

08 function startup(&$controller) {

09 }

10

11 //called after Controller::beforeRender()

12 function beforeRender(&$controller) {

13 }

14

15 //called after Controller::render()

16

function shutdown(&$controller)

{

17 }

Trang 8

18

19 //called before Controller::redirect()

20 function beforeRedirect(&$controller, $url, $status=null, $exit=true) {

21 }

22

23

function redirectSomewhere($value)

{

24 // utilizing a controller method

25 }

Vậy Component Common hoàn chỉnh của tôi như sau :

(app/controllers/components/common.php)

01 <?php

02 class CommonComponent extends Object{

03 //called before Controller::beforeFilter()

04 function initialize(&$controller, $settings = array()) {

05 // saving the controller reference for later use

06 $this->controller =& $controller;

Trang 9

07 }

08 //called after Controller::beforeFilter()

09 function startup(&$controller) {

10 }

11 //called after Controller::beforeRender()

12 function beforeRender(&$controller) {

13 }

14 //called after Controller::render()

15 function shutdown(&$controller) {

16 }

17 //called before Controller::redirect()

18 function beforeRedirect(&$controller, $url, $status=null, $exit=true) {

19 }

20 function redirectSomewhere($value) {

21 // utilizing a controller method

22 }

Trang 10

23 // Ham chuyen doi tieng viet sang khong dau

24 function unicode_convert($str){

25 if(!$str) return false;

26 $unicode = array(

27 'a'=>array('á','à','ả','ã','ạ','ă','ắ','ặ','ằ','ẳ','ẵ','â','ấ','ầ','ẩ','ẫ','ậ'),

28 'A'=>array('Á','À','Ả','Ã','Ạ','Ă','Ắ','Ặ','Ằ','Ẳ','Ẵ','Â','Ấ','Ầ','Ẩ','Ẫ','Ậ'),

29 'd'=>array('đ'),

30 'D'=>array('Đ'),

31 'e'=>array('é','è','ẻ','ẽ','ẹ','ê','ế','ề','ể','ễ','ệ'),

32 'E'=>array('É','È','Ẻ','Ẽ','Ẹ','Ê','Ế','Ề','Ể','Ễ','Ệ'),

33 'i'=>array('í','ì','ỉ','ĩ','ị'),

34 'I'=>array('Í','Ì','Ỉ','Ĩ','Ị'),

35 'o'=>array('ó','ò','ỏ','õ','ọ','ô','ố','ồ','ổ','ỗ','ộ','õ','ớ','ờ','ở','ỡ','ợ'),

36 '0'=>array('Ó','Ò','Ỏ','Õ','Ọ','Ô','Ố','Ồ','Ổ','Ỗ','Ộ','Õ','Ớ','Ờ','Ở','Ỡ','Ợ'),

37 'u'=>array('ú','ù','ủ','ũ','ụ','ý','ứ','ừ','ử','ữ','ự'),

38 'U'=>array('Ú','Ù','Ủ','Ũ','Ụ','Ý','Ứ','Ừ','Ử','Ữ','Ự'),

Trang 11

39 'y'=>array('ý','ỳ','ỷ','ỹ','ỵ'),

40 'Y'=>array('Ý','Ỳ','Ỷ','Ỹ','Ỵ'),

41 );

42 foreach($unicode as $nonUnicode=>$uni){

43 foreach($uni as $value)

44 $str = str_replace($value,$nonUnicode,$str);

45 }

46 return $str;

47 }

48 }

49 ?>

Cách sử dụng lớp Component Common vừa mới tạo :

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

01 <?php

02 class TestcommonsController extends AppController {

03 var $components = array("Common");

Trang 12

04

05 function test_component(){

06

$string = "Diễn đàn QHonline Nơi khơi nguồn các mã nguồn mở "; // chuỗi ban đầu

07

$data = $this->Common->unicode_convert($string); // dữ liệu sau khi chuyển đổi không dấu

08 $this->set("data",$data); // gán dữ liệu để hiển thị bên view

09 }

10 ?>

Tạo file test_component.ctp (app/views/testcommons/ test_component.ctp)

1 <?php

2 echo $data;

3 ?>

Trang 13

Chạy thử : http://localhost/cakephp/testcommons/test_component

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ư

Trang 14

sau:

1 class AppController extends Controller {

2 var $components=array('Acl',’Mail’);

3 }

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

1 var $components=array('Acl',’Mail’);

Ngày đăng: 28/06/2014, 14:20

TỪ KHÓA LIÊN QUAN

w