Yii-获取由正斜杠分隔的参数。

时间:2014-05-13 12:37:22

标签: php regex yii url-rewriting restful-url

我正在开发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;作为两个参数?

提前致谢。

1 个答案:

答案 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>',
),

但是我不会让一切变得动态,因为你通常只想将参数idmode传递给用户/某事。