【发布时间】:2013-12-30 00:00:04
【问题描述】:
我希望我的控制器在找不到模型时返回 404 响应,并且我想指定自定义消息,而不是默认的“The requested controller was unable to dispatch the request.”
我尝试在ViewModel 中指定reason,从响应对象中设置reasonPhrase...似乎没有任何效果。我目前正在研究如何防止默认行为,但如果有人在我之前知道,那就太好了。 (也许还有一种比我无论如何都能找到的更好的方法。)
这是我所拥有的,但不起作用:
$userModel = $this->getUserModel();
if (empty($userModel)) {
$this->response->setStatusCode(404);
$this->response->setReasonPhrase('error-user-not-found');
return new ViewModel(array(
'content' => 'User not found',
));
}
谢谢。
【问题讨论】:
-
"请求的控制器无法发送请求。"由页面未找到事件处理程序返回,而不是您的控制器。
-
查看 404 模板。如果使用 Application 模块,请参阅 Application/view/error/404.phtml switch ($this->reason) { ... }
-
@dphn,是的,关键是我在控制器中设置了原因,它在渲染阶段之间被覆盖。
-
@imel96,你能详细说明一下吗?评论本身无助于解决这里的问题。
-
控制器由 EventManager 在 EVENT_DISPATCH 事件中调度,但前提是它可以被调度。如果不能,则将触发 EVENT_DISPATCH_ERROR,您的代码将不会被执行,它将显示 view/error/404.phtml。 Otoh,如果调度了控制器,您的代码对我来说看起来不错。抱歉,如果不回答,我猜是路由问题?
标签: php http-headers zend-framework2 http-status-code-404