Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php getStaticHelper(action helper)获取参数但给出错误_Php_Zend Framework - Fatal编程技术网

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
,所以它必须像我一样在两行上,但这似乎仍然不是正确的方法。