2011-03-12 9 views
0

조치 자체에서 호출 된 일반 조치 도우미에 매개 변수를 전달하는 방법을 알고 있습니다. 그러나 이번에는 내가 그래서 중간 라인getStaticHelper (action helper) 매개 변수를 가져 오는 중에 오류가 발생합니다.

$hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test'); 
$hooks->preDispatch($input); 
Zend_Controller_Action_HelperBroker::addHelper($hooks); 

를 추가 내가 매개 변수를 전달하려는 HelperBroker::getStaticHelper

$hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test'); 
Zend_Controller_Action_HelperBroker::addHelper($hooks); 

를 사용하여 부트 스트랩에서 일을 해요 그리고 preDispatch이

public function preDispatch($input){ 
    var_dump($input); 
} 
입니다

이상한 점은 var_dump가 입력을 보여 주지만이 오류가 발생합니다.

Warning: Missing argument 1 for Test::preDispatch(), 

Notice: Undefined variable: input 
+0

인수없이 아무 곳에서나 다시 호출되고 있습니까? – alex

+0

@alex 흠, 좋은 지적. 나는 그것을 조사 할 것이다. – jblue

+0

함수에 보내기 전에 정의 된 $ input은 무엇입니까? – SenorPuerco

답변

1

preDispatch()는 디스패치 루프에서 호출되는 후크입니다. 이런 식으로 사용해서는 안됩니다.

Zend_Controller_Action에는 :

/** 
* Dispatch the requested action 
* 
* @param string $action Method name of action 
* @return void 
*/ 
public function dispatch($action) 
{ 
    // Notify helpers of action preDispatch state 
    $this->_helper->notifyPreDispatch(); 

    ... 
    $this->_helper->notifyPostDispatch(); 
} 

는 또한이 코드는 모호 :

Zend_Controller_Action_HelperBroker::addHelper($hooks); 

액션 도우미가 getStaticHelper() 메서드 호출에 의해 도우미 브로커 내에 등록 된

0

당신이처럼해야한다 :

class MyHelper extends Zend_Controller_Action_Helper 
{ 
    const BAR = false; 

    public function preDispatch($request) 
    { 
     $this->ifBarExit(self::BAR); 
    } 

    public function ifBarExit($barValue) 
    { 
     if ($barValue) { 
      exit('Bar was true!'); 
     } 
    } 
} 

preDispatch는 첫 번째 변수가 요청 객체라고 생각합니다. 이는 ZF의 내부 구조에 어떻게 연결되어 있는지를 나타냅니다.

하지만 지금은 새로운 기능을 당신이 할 수있는

: 당신은 당신의 자신의 Vilain 계획에 대한 내부 방법과 혼란 (즉, 그들에게 전화) 안

$helper = Zend_Controller_Action_HelperBroker::getStaticHelper('MyHelper'); 
$variable = true; 
$helper->ifBarExit($variable); //won't exit 

. 도우미에 무언가를 주입하려면 직접 전달하지 마십시오. $helper->setImportantThing($thing);과 같은 멤버 변수와 sth를 추가하면 protected $_thing;에 저장되고 그 다음 메서드 내 echo $this->_thing;

관련 문제