Zend framework2 404未使用Zend framework 2在JSON中呈现HTTP错误

Zend framework2 404未使用Zend framework 2在JSON中呈现HTTP错误,zend-framework2,Zend Framework2,我正在使用zend framework2创建一个简单的restful api,我已经参考了Rob Allen关于这个主题的注释以及作者的这篇优秀教程http://hounddog.github.com/blog/getting-started-with-rest-and-zend-framework-2/ 下面是我的模块_config.php。您将看到我配置了路由和JSON视图策略。我的理解是,当您以这种方式设置JSON策略时,它可以容纳所有模块。问题是,当输入无效路由时,404响应将以html

我正在使用zend framework2创建一个简单的restful api,我已经参考了Rob Allen关于这个主题的注释以及作者的这篇优秀教程http://hounddog.github.com/blog/getting-started-with-rest-and-zend-framework-2/

下面是我的模块_config.php。您将看到我配置了路由和JSON视图策略。我的理解是,当您以这种方式设置JSON策略时,它可以容纳所有模块。问题是,当输入无效路由时,404响应将以html格式发送回,即使Accept标头正在请求Application/json

我已经为此挣扎了两天了,如果有任何建议或帮助,我将不胜感激

此对api的curl调用生成预期的404错误

curl -i -H "Accept: application/json" http://myapi-dev.local/xxx/1
Module_config.php

return array(
    'controllers' => array(
        'invokables' => array(
            'Dips\Controller\Roles' => 'Dips\Controller\RolesController', //maps controller alias to a physical controller
        ),
    ),
    'router' => array(
        'routes' => array(
            'dips' => array(
                'type' => 'segment',
                'options' => array(
                  'route' => '/dips/roles/:apikey/:uname/:appname',
                  'constraints' => array(
                    'apikey' => '[a-zA-Z0-9]+',
                    'uname' => '[a-zA-Z]+',
                    'appname' => '[a-zA-Z][a-zA-Z0-9_-]*',
                 ),
                 'defaults' => array(
                     'controller' => 'Dips/Controller/Roles',
                  ),
                ),
            ),
        ),
    ),
    'view_manager' => array(
      'strategies' => array(
          'ViewJsonStrategy',
      ),
    ),
);

您需要实现一个额外的渲染策略,并将其放在默认404渲染策略之上的堆栈中。或者,您可以扩展现有的ViewJsonStrategy以包括错误处理


默认的404策略是Zend/Mvc/View/Http/RouteNotFoundStrategy。如果您查看它的detectNotFoundError方法,您可以看到它何时被触发。

您可能需要编写自己的JsonNotFoundStrategy来侦听
MvcEvent::EVENT\u DISPATCH\u ERROR
事件,让它检查它是否是404,然后检查accept头并最终设置一个JsonModel作为对handleThanks的实际JsonStrategy的响应,您能提供或碰巧知道一个示例来说明这一点吗?