0

我使用以下 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',
4

2 回答 2

0

你可以做你想做的事,但有更好的方法来处理 REST 请求,使用 Content Type 标头来决定要显示的格式。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 之类的路由

于 2013-02-14T17:31:37.793 回答
0

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

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

然后你需要改变这个:

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

对此:

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

让我知道这是否适合您。

于 2013-02-20T00:43:50.340 回答