以下是我的模块配置文件
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。< /强>
路上任何光线都会有帮助
谢谢
答案 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',
)
),
),