我重构了一些常见的行为,这些行为在我的Controller Actions的顶部重复进入preDispatch方法 - 这很好,除了我必须忍受一般400错误,即使真的应该有404。
这是因为默认的preDispatch方法不知道需要什么Action - 所以我无法测试它是否存在,如果不存在则测试404.
除了完全Zend Controller的dispatch()方法并将Action名称传递给preDispatch之外,还有更好的解决方案吗?
更新:请注意,这是Zend Framework 1.10
答案 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
}