2009-10-27 4 views
1

내장 된 CakePHP 구성 요소 (예 : EmailComponent)를 독립 실행 형 클래스로 사용할 수 있습니까?CakePHP에서 컨트롤러 외부의 구성 요소 사용

나는 이것이 디자인 상 결함을 보여주고 있으며, 케이크 방식이나 그와 같은 방식으로하지 않는다는 것을 알고 있지만 어떤 모델/컨트롤러와도 연결되어 있지 않은 클래스를 가지고 있으며이를 보내고 싶습니다. 이메일. 이 상황에서 분명히 null 인 $this->Controller의 정보를 읽으므로 EmailComponent 가져 오기가 작동하지 않습니다.

제안 사항?

답변

1

App::import을 사용해보세요. 당신은 내가 정상적으로 컨트롤러에 대한 참조를 기대 할 수 있다고 생각하기 때문에 생성자에 매개 변수로 null을 통과해야 할 수도 있습니다

App::import('Component', 'Email'); 
$email = new EmailComponent(); 

참고. 이것은 EmailComponent 레이아웃과 뷰를 찾는 것과 관련하여 문제를 야기 할 수 있지만, 주위를 둘러 봐야합니다.

+1

나는 이것이 OP가 갖는 정확히 문제라고 생각합니다. EmailComponent는 컨트롤러 기능을 몇 가지 지점에서 사용하므로 'null'을 전달하면 많은 도움이되지 않습니다. – deceze

+0

@deceze : 예, 머리에 못을 박는 다. – nickf

4
App::import('Core', 'Controller'); 
App::import('Component', 'Email'); 
$this->Controller =& new Controller(); 
$this->Email =& new EmailComponent(null); 
$this->Email->initialize($this->Controller); 

당신을 위해 일해야 EmailComponent in a (cake) Shell 11 주석을 참조하십시오.

0

나는 이것을하기위한 케이크 방법이 너무 많은 고통이 아니라면 구성 요소를 공급 업체로 만드는 것이라고 확신한다. 그런 다음 코드베이스 어디에서나 액세스 할 수 있습니다. beforeFilter에서이 코드를 사용하여 컨트롤러의 구성 요소처럼 사용할 수 있습니다.

App::import('Vendor', 'EmailVendor'); 
$this->EmailVendor = new EmailVendor($this); 
관련 문제