2013-03-06 84 views
4

我使用zend framework2创建了一个简单的restful api,并且我已经引用了Rob Allen关于这个主题的笔记以及http:// hounddog的优秀教程。 github.com/blog/getting-started-with-rest-and-zend-framework-2/404使用Zend框架在JSON中不呈现HTTP错误2

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

我一直在为此而努力了2天了任何建议或帮助,将不胜感激

这卷曲调用API产生预期的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

想想你可能需要编写自己的JsonNotFoundStrategy来监听MvcEvent :: EVENT_DISPATCH_ERROR事件,检查它是否是404,然后检查accept头并最终将JsonModel设置为实际JsonStrategy的响应以处理 – Crisp 2013-03-06 16:48:51

+0

谢谢,你能提供或碰巧知道一个例子,说明这一点? – Rodney 2013-03-12 15:14:33

回答

0

您需要实现额外的渲染策略,并把它放在堆栈中的默认的404渲染策略。或者,您可以扩展现有的ViewJsonStrategy以包含错误处理。

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