我正在开发REST API。我发现了一些扩展,但客户端需求与这些扩展提供的完全不同。
我需要为每个控制器中的每个请求类型单独执行一个操作,因此我可以完全控制自己。
我目前正在使用以下网址管理员规则;
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
以这种方式安排我的网址;
http://www.mywebsite.com/index.php/<module>/<controller>/<action>
这可以轻松地为这样的请求提供服务;
http://www.mywebsite.com/index.php/api/user/register
我面临的问题是如何为这些类型的请求提供服务。
http://www.mywebsite.com/index.php/api/user/15/profile
有没有办法可以获得15(id / pk)和&#34; profile&#34;作为两个参数?
提前致谢。
答案 0 :(得分:1)
你必须在urlmanager中定义它,例如:。
'rules' => array(
'api/user/<id:\d+>/<mode:\w+>' => 'api/user/someaction',
),
然后您可以转到http://www.mywebsite.com/index.php/api/user/15/profile 并调用api模块,用户控制器,动作someaction并将$ _GET变量“id”和“mode”传递给它。
actionSomeaction($id, $mode)
{
var_dump($id, $mode);
}
编辑:使其动态使用:
'rules' => array(
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>/<mode:\w+>' => '<module>/<controller>/<action>',
),
但是我不会让一切变得动态,因为你通常只想将参数id
和mode
传递给用户/某事。