我知道如何将参数传递给在操作本身中调用的普通操作助手。但这次我使用HelperBroker::getStaticHelper
$hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test');
Zend_Controller_Action_HelperBroker::addHelper($hooks);
我想传递参数,所以我添加了中间线
$hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test');
$hooks->preDispatch($input);
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 :(得分: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()方法调用
在辅助代理中注册了Action帮助程序答案 1 :(得分: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内部连接的。
但现在使用新功能可以做到:
$helper = Zend_Controller_Action_HelperBroker::getStaticHelper('MyHelper');
$variable = true;
$helper->ifBarExit($variable); //won't exit
你不应该为自己的vilain计划搞乱内部方法(即称呼它们)。如果你想在帮助器中注入一些东西,不要直接传递它。添加成员变量,例如$helper->setImportantThing($thing);
,它会将其保存到protected $_thing;
,然后在方法echo $this->_thing;