用于RESTfull API的YII URLManager

int*_*ist 4 url-routing yii

尝试使用yii处理RESTfull API(使用yii的第一个项目)

让URLManager正确路由调用时遇到问题:

    'urlManager' => array(
        'urlFormat' => 'path',
        'showScriptName' => false,
        'caseSensitive' => false,
        'rules' => array(
          'api/<controller>' => array('api/<controller>/list', 'verb' => 'GET'),
          'api/<controller>' => array('api/<controller>/create', 'verb' => 'POST'),
        ),
    ),
Run Code Online (Sandbox Code Playgroud)

尝试使用这个(这不是完整的片段,我有PUT/DELETE等的调度员..但是它没有用......绝望,我甚至尝试过这样简单的事情:

    'urlManager' => array(
        'urlFormat' => 'path',
        'showScriptName' => false,
        'caseSensitive' => false,
        'rules' => array(
            'tezt' => array('landing/beta', 'verb' => 'GET'),
            'tezt' => array('landing', 'verb' => 'POST'),
        ),
    ),
Run Code Online (Sandbox Code Playgroud)

每当我删除其中一条规则时,它都可以工作,但是当我将这两条规则都放入时,它们都不起作用,我得到了异常异常.CHttpException.404

 exception 'CHttpException' with message 'Unable to resolve the request
 "tezt".' in /yii-1.1.10/web/CWebApplication.php:280
Run Code Online (Sandbox Code Playgroud)

现在已经把我的脑袋再次敲了2天.可能在Web上看到了关于URLManager的所有示例和教程(虽然找不到对规则的直接和完整的解释).但是,没有快乐.

难道我做错了什么?这是我的盒子设置吗?

Sha*_*hid 6

我试过这个并且它有效:

'rules'=>array(
            //API URLs
            array('api/<controller>/index', 'pattern'=>'api/<controller:\w+>', 'verb'=>'GET'),
            array('api/<controller>/create', 'pattern'=>'api/<controller:\w+>', 'verb'=>'POST'),
            array('api/<controller>/view', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'GET'),
            array('api/<controller>/update', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'PUT, POST'),
            array('api/<controller>/delete', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'DELETE'),
            //Other URLs
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
Run Code Online (Sandbox Code Playgroud)

"api"是按modules部分配置的模块

'api'=>array('defaultController' => 'default',),
Run Code Online (Sandbox Code Playgroud)

在REST客户端中,您必须指定控制器名称,即使对于默认控制器也是如此.

我正在使用Yii 1.1.10,但我认为Yii支持自1.1.7以来的RESTful URL.