2010-11-25 4 views
1

사이트가 유지 관리로 설정되어 있는지 감지하는 컨트롤러 플러그인이 있습니다. 유지 관리 컨트롤러로 _forward하여 '미안 ...'메시지를 표시하고 싶습니다.컨트롤러 플러그인에서 젠드 _forward

리디렉션을 사용하지 않으려면 사용자의 현재 URL이 변경되지만 _forward는 Zend_Controller_Action 보호 된 메서드이므로 컨텍스트에서 호출 할 수 없습니다. 어떻게해야합니까?

답변

6

때 플러그인의 preDispatch 메소드가 호출되면 요청이 전달되지 않습니다. 따라서 요청에 대한 컨트롤러 및 작업을 설정하여 "전달"할 수 있습니다.

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    if ($this->isMaintenanceMode()) { 
     $request->setControllerName('error'); 
     $request->setActionName('maintenance'); 
    } 
} 
+0

나는 그 방식이 마음에 들다. 왜 내가 그걸 생각하지 않았을까? ;) –

+1

좋은 생각, 고마워. – Ashley

0

플러그인이 _forward()를 제대로 수행 할 수 없기 때문에; 컨트롤러 (들) init() 방법 당신은 당신의 사이트 작업이 유지 보수 작업을하지 않습니다 유지 관리 모드 에라는 플래그를 확인할 수 있습니다 다음 $this->_forward('maintenance-action');

뭔가 같은 :

// .. in your action controller 
public function init() { 
    $maintenanceMode = checkTheFlagYourPluginSet(); 
    // .. other code removed omitted 
    if ($maintainenceMode && $this->_request->getActionName() != 'maintenance-action') { 
     // return so that nothing else gets executed in the init() 
     return $this->_forward('maintenance-action'); 
    } 
} 
관련 문제