REST路由在ZF2 Rest Skeleton中失败

时间:2013-02-13 09:30:12

标签: php rest zend-framework2 restful-architecture

我使用以下module.config.php配置了Resftul模块(https://github.com/scaraveos/ZF2-Restful-Module-Skeleton)。但是当我想访问“public / rest / article.json”时,路由失败。

有人对我有线索吗? 给出了控制器。

return array(
    'errors' => array(
        'post_processor' => 'json-pp',
        'show_exceptions' => array(
            'message' => true,
            'trace'   => true
        )
    ),
    'di' => array(
        'instance' => array(
            'alias' => array(
                'json-pp'  => 'Rest\PostProcessor\Json',
                'image-pp' => 'Rest\PostProcessor\Image',
            )
        )
    ),
    'controllers' => array(
        'invokables' => array(
            'article' => 'Rest\Controller\ArticleController',
        )
    ),
    'router' => array(
        'routes' => array(
            'restful' => array(
                'type'    => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'       => '/[:controller][.:formatter][/:id]',
                    'constraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'formatter'  => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'         => '[a-zA-Z0-9_-]*'
                    ),
                ),
            ),
        ),
    ),
);

autoload_classmap是

'Rest\Controller\ArticleController' => __DIR__ . '/src/Rest/Controller/ArticleController.php',

2 个答案:

答案 0 :(得分:0)

您可以执行您想要的操作,但有一种更好的方法来处理REST请求,使用“内容类型”标头来决定要显示的格式。 ZF2擅长使用View Strategies:

http://framework.zend.com/manual/2.0/en/modules/zend.view.quick-start.html#creating-and-registering-alternate-rendering-and-response-strategies

您可以根据请求的内容类型使用不同的策略,这是您应该使用REST API执行的操作。

您可以重写路线以使用以下内容:

'route' => '/[:controller[.:format][/:id]]',
'constraints' => array(
    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
    'format' => '(xml|json|sphp)',
    'id' => '[1-9][0-9]*',
),
'defaults' => array(
    'controller' => 'Rest\Controller\ArticleController',
    'format' => 'xml',
),

然后你可以使用'/articles.json/9'或/ articles / xml等路线

答案 1 :(得分:0)

我不确定您的vhost配置是什么,但如果您尝试访问此网址:

http://somehost/public/rest/article.json

然后你需要改变这个:

'route' => '/[:controller][.:formatter][/:id]',

到此:

'route' => '/public/rest/[:controller][.:formatter][/:id]',

请告诉我这是否适合您。