getStaticHelper(动作助手)获取参数但给出错误

时间:2011-03-12 03:38:55

标签: php zend-framework

我知道如何将参数传递给在操作本身中调用的普通操作助手。但这次我使用HelperBroker::getStaticHelper

在Bootstrap中进行此操作
$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

2 个答案:

答案 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;