Zend Controller preDispatch预处理干扰调度

时间:2012-01-20 05:34:17

标签: php zend-framework

我重构了一些常见的行为,这些行为在我的Controller Actions的顶部重复进入preDispatch方法 - 这很好,除了我必须忍受一般400错误,即使真的应该有404。

这是因为默认的preDispatch方法不知道需要什么Action - 所以我无法测试它是否存在,如果不存在则测试404.

除了完全Zend Controller的dispatch()方法并将Action名称传递给preDispatch之外,还有更好的解决方案吗?

更新:请注意,这是Zend Framework 1.10

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    $front = Zend_Controller_Front::getInstance();
    if( $front->getDispatcher()->isDispatchable($request) )  {
        // if dispatchable do some stuff
    } else {
        // else show the error
    }
}

答案 1 :(得分:0)

  

。 。 。默认的preDispatch方法不知道Action是什么   要求。 。

您可以通过在请求对象上调用以下方法来获取preDispatch()方法中的控制器和操作名称:

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    $controller = $request->getControllerName();
    $action = $request->getActionName();
    // Do stuff
}