使用Zend框架2在JSON中不呈现404 HTTP错误

时间:2013-03-06 16:31:08

标签: zend-framework2

我正在使用zend framework2创建一个简单的restful api,我参考了Rob Allen关于这个主题的注释以及http://hounddog.github.com/blog/getting-started-with-这个优秀的教程。休息和 - Zend的框架-2 /

下面的

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

我已经在这2天内苦苦挣扎,现在任何建议或帮助都会受到赞赏

这个对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',
      ),
    ),
);

1 个答案:

答案 0 :(得分:0)

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

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