【问题标题】:Ignoring the default 404 route in ZF3 MVC忽略 ZF3 MVC 中的默认 404 路由
【发布时间】:2017-03-20 18:03:00
【问题描述】:

目前,对于我在 RESTFUL Zend Framework 3 中的 GET 端点,如果我无法通过参数找到用户请求的项目,我会使用 JSON API errors 发送 400,如下所示:

$this->response->setStatusCode(Response::STATUS_CODE_400);
return JsonModel([
    'errors' => [
        [ 'title' => 'Not found' ]
    ]
]);

当然,正确的状态是 404。但是,一旦我设置$this->response->setStatusCode(Response::STATUS_CODE_404);,就会显示默认的 404 路由。如何禁用它?

我尝试在 module.config.php 中注释掉以下内容

. . .
'view_manager' => [
    // 'display_not_found_reason' => true,
    'display_exceptions'       => true,
    'doctype'                  => 'HTML5',
    // 'not_found_template'       => 'error/404',
    'exception_template'       => 'error/index',
    'strategies' => [
        'ViewJsonStrategy',
    ],
    . . .
],

这行得通,除了我有两个问题:

  1. 我想要一些端点的 404 路由
  2. 它将信息添加到我不想发送的返回 JSON 中

    { “错误”:[ { "title": "未找到", } ], "message": "找不到页面。", “显示异常”:真, "控制器": "公司\模块\控制器\RestfulController", “控制器类”:空 }

我有什么选择?

【问题讨论】:

  • 您应该简单地更新 not_found_template 键以匹配您想要的模板。
  • Unex,但我想返回一个 JSON 模型,其中包含我在 JSON 模型对象中预填充的错误。我可以用视图做 JSON 吗?
  • 如果你制作了一个自定义的 404 页面,你可以用它做任何你想做的事情。

标签: zend-framework-mvc zend-framework3


【解决方案1】:

您的问题是由您的默认视图管理器注册的 Zend\Mvc\View\Http\RouteNotFoundStrategy 引起的。你可以在 Zend\Mvc\View\Http\ViewManager 看到:

$routeNotFoundStrategy   = $services->get('HttpRouteNotFoundStrategy');

即使您使用 'display_exceptions' => false,仍然会附加消息。

为了克服这个问题,一种解决方案是将模型内容注入响应并直接在您的视图中返回后者:

$this->response->setStatusCode(Response::STATUS_CODE_404);
$model = new JsonModel([
        'errors' => [
            [ 'title' => 'Not found' ]
        ]
]);
return $this->getResponse()->setContent($model->serialize());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多