2013-06-04 2 views
2

Wordpress에서 볼 수있는 것과 비슷한 액션 후크를 포함하고 싶습니다. 플러그인 작성에 대한 장을 읽었지만 부모 앱의 코드를 변경하지 않고 유지할 수 있어야합니다.CakePHP : 플러그인 용 액션 후크 만들기

구워진 지원이 있습니까?

그렇지 않은 경우 좋은 방법이 있습니까? 나는 몇 가지 아이디어를 가지고 있지만 휠을 재발 명하게 될까봐 걱정합니다.

답변

4

예 있습니다.

CakePHP Event System

그것은 워드 프레스의 후크와 같은 많은,하지만 더 나은 작동합니다.

다른 위치에서 콜백을 등록 할 수 있지만 플러그인의 bootstrap.php에서 쉽게 할 수 있습니다.

응용 프로그램이 플러그인을로드하면 CakePHP에 부트 스트랩하도록 알릴 수 있습니다. 이것은이 명령으로 수행됩니다.

CakePlugin::loadAll(array(array('bootstrap'=>true,'routes'=>true))); 
+0

청취자 등록에 약간의 문제가 있습니다. 내가 올바르게 이해한다면, 필자는이 책의 예제 (http://book.cakephp.org/2.0/en/core-libraries/events.html#registering-listeners)와 비슷한 코드를 플러그인의 bootstrap.php 파일에 넣어야한다. 제공 한 코드를 상위 응용 프로그램의 bootstrap.php 파일에 저장하십시오. 그 맞습니까? – emersonthis

+0

예, 플러그인에 대한 경로가없는 경우'routes'를 제거하십시오. http://book.cakephp.org/2.0/en/plugins.html – cgTag

+0

도와 주셔서 감사합니다. 예제 코드에서 마지막 줄 ('$ this-> Model-> getEventManager() -> attach()')의'Error : 객체 컨텍스트에 없을 때 $ this 사용'을 얻습니다. 어떻게이 플러그인의 bootstrap.php 파일에서 작동해야합니까? – emersonthis

2

난 당신이 acomplish하려는 모르겠어요,하지만 당신은 같은 것을 할 수있는 : beforeFilter() 방법은 certains 후크를 만들 수있는 좋은 장소입니다

컨트롤러 (들) :

public function beforeFilter() { 
    parent::beforeFilter(); // don't forget to call parent code 
    $myHandler->doSomethingInteresting($this->name, $this->action); 
} 

여기서 $this->name은 호출중인 컨트롤러의 이름을 제공하고 $this->action은 현재 작업의 이름을 제공합니다.

조금 도움이 되었기를 바랍니다.

+0

사실,하지만 모델에 연결하려는 경우 데이터를 저장할 때 응용 프로그램. 그 갈고리가 언제 발사 될지는 알려주지 않습니다. 컨트롤러가 현재 활동이 아닐 수도 있습니다. – cgTag

+0

당신은 절대적으로 옳습니다. 너의 대답이 더 합리적이라고 생각해. – ilbesculpi

관련 문제