2013-10-23 2 views
0

사용자 추가를 위해 플러그인의 컨트롤러 메소드를 다시 사용하려고합니다 (플러그인은 usermgmt, 구매 한 플러그인 임). 플러그인의 메서드는 필요한 모든 작업을 수행하지만 다른 페이지로 리디렉션을 수행하여 완료됩니다.일시적으로 컨트롤러 리디렉션을 사용하지 않음

일시적 컨트롤러 비활성화 할 수 있다면 나는 궁금 플러그인 코드를 수정하려는, 그리고하지 않습니다 당신은 그런 식으로 컨트롤러를 사용 안하는

class MyController extends AppController{ 
    function signUpUser(){ 
     //populate $this->request->data to be what plugin controller method is looking for 

     //temporarily disable Controller::redirect 

     //make call to plugin's controller method 
     $usersController = new UsersController(); 
     $usersController->constructClasses(); 
     $usersController->addUser(); 

     //re-enable Controller::redirect 

     //Do my own redirect 
     $this->redirect('/welcome'); 
    } 
} 

답변

1

리디렉션 방법은, 거기에 아마 모델이나 구성 요소 대신 사용할 수 있습니다. 사용자 컨트롤러를 확장하는 것도 옵션 일 수 있습니다. 어쨌든, 당신이 그것을 구입했다고 말했기 때문에, 당신은 지원에 연락하지 않는 것이 좋습니다, 그들의 물건이 어떻게 작동 하는지를 가장 잘 알아야합니까?

그런데 실제 질문에 대답하겠습니다. 컨트롤러를 통해 리디렉션을 사용하지 못하도록하려면 Controller::redirect() 메서드를 재정의하고 기능을 사용하지 않도록 설정할 수있는 논리를 구현해야합니다.

public $redirectEnabled = true; 

public function redirect($url, $status = null, $exit = true) { 
    if($this->redirectEnabled) { 
     parent::redirect($url, $status, $exit); 
    } 
} 

이 있어야한다 거의 자기 explantory :

는 여기가 리디렉션을 사용할지 여부를 정의하는 속성을 사용, 검증되지 않은 예입니다. 컨트롤러에서 $this->redirectEnabledtrue/false으로 설정하여 리디렉션 기능을 사용/사용 중지 할 수 있습니다.

+0

먼저 답/샘플 코드가 내 질문에 대답합니다. 내가 가지고있는 거의 작동하는 2 가지 솔루션 중 하나입니다. 플러그인 작성자는 확장 할 수없는 몇 가지 코딩 방법을 선택했기 때문에 (재사용 가능 구성 요소 (뚱뚱한 모델이든 구성 요소이든 상관 없음)), 결국 컨트롤러 방법을 거의 스스로 복제했습니다. 이상적은 아니지만 지금은 효과가 있습니다. –

관련 문제