Zend framework 2 Rest API:调用getList()而不是get($ id)函数

时间:2013-12-27 11:59:31

标签: php rest zend-framework2 zend-rest

以下是我的模块配置文件

return array(
'controllers' => array(
    'invokables' => array(
        'RSMobile\Controller\User' => 'RSMobile\Controller\UserController',
    ),
),

// Routes for API calls
'router' => array(
    'routes' => array(

        'rsmobile' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '/rsmobile',
                'defaults' => array(
                    'controller' => 'RSMobile\Controller\User',
                )
            ),

            // Child routes
            'child_routes' => array(
                // Route for "user" API
                'user' => array(
                    'type' => 'segment',
                    'options' => array(
                        'route' => '/user[/:id]',
                        'constraints' => array(
                                               'id'     => '[0-9a-zA-Z]+',
                                                              ),
                        'defaults' => array(
                            'controller' => 'RSMobile\Controller\User',
                        )
                    ),
                ),
          )

问题:

我在UserController文件中扩展了AbstractRestfulController,但是当我用www.example.com/rsmobile/user?userid=1调用它时,它会调用 get-list 而不是 get。< /强>

路上任何光线都会有帮助

谢谢

2 个答案:

答案 0 :(得分:4)

我认为您只想使用www.example.com/rsmobile/user?userid=1模式,而不是www.example.com/rsmobile/user/1

AbstractRestfulController中,$identifierName默认设置为id。如果在params列表中找不到id,则会调用getList()方法。所以你可以做的是你的控制器(必须扩展AbstractRestfulController)写下代码:

public function __construct() {
    $this->identifierName = 'userId'; // Override $identifierName value specified in AbstractRestfulController.
}

答案 1 :(得分:2)

我的理解是该请求符合您的/rsmobile/路由而不是/rsmobile/user路由。是吗?

我不知道你如何处理参数userid,但可能你不需要它,而不是www.example.com/rsmobile/user?userid=1你可以拨打www.example.com/rsmobile/user/1来匹配你的路线,并在控制器中为您提供一个id参数。

另外,我认为您错过了子路由中的'may_terminate' => true int。可能你应该是:

        // Child routes
        'child_routes' => array(
            // Route for "user" API
            'user' => array(
                'type' => 'segment',
                 'may_terminate' => true,
                'options' => array(
                    'route' => '/user[/:id]',
                    'constraints' => array(
                                           'id'     => '[0-9a-zA-Z]+',
                                                          ),
                    'defaults' => array(
                        'controller' => 'RSMobile\Controller\User',
                    )
                ),
            ),