4

我正在使用zend framework2创建一个简单的restful api,并且我参考了Rob Allen关于该主题的笔记以及http://hounddog.github.com/blog/getting-started-with-rest-and的这个优秀教程-zend-framework-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

模块配置.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',
      ),
    ),
);
4

1 回答 1

0

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

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

于 2013-05-02T21:33:07.683 回答