Php getStaticHelper(action helper)获取参数但给出错误
我知道如何将参数传递给在动作本身中调用的普通动作助手。但是这次我在引导中使用Php getStaticHelper(action helper)获取参数但给出错误,php,zend-framework,Php,Zend Framework,我知道如何将参数传递给在动作本身中调用的普通动作助手。但是这次我在引导中使用HelperBroker::getStaticHelper $hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test'); Zend_Controller_Action_HelperBroker::addHelper($hooks); 我想传递一个参数,所以我添加了中间线 $hooks = Zend_Controller_Action_Hel
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);
最重要的是
public function preDispatch($input){
var_dump($input);
}
奇怪的是var_dump向我显示了输入,但我也得到了这个错误
Warning: Missing argument 1 for Test::preDispatch(),
Notice: Undefined variable: input
preDispatch()是在分派循环中调用的钩子。你不应该这样使用它
Zend_控制器_动作:
/**
* 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()方法调用在helper broker中注册了操作帮助程序您应该这样做:
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)的内容
将其保存到受保护的$\u thing中
然后在方法内部echo$this->\u thing代码>是否在没有参数的地方再次调用它?@alex-Hmm,说得好。我会检查一下。在将$input发送到函数之前,它的定义是什么?@SenorPuerco它只是一个字符串。我认为@alex可能有点问题,因为当我创建$hooks
时,也许我应该以某种方式传递参数,但是如果我在第一行添加->preDispatch($input)
,第三行抱怨$hooks
不是类型Zend\u Controller\u Action\u Helper\u Abstract
,所以它必须像我一样在两行上,但这似乎仍然不是正确的方法。