用于RESTfull API的YII URLManager

用于RESTfull API的YII URLManager,yii,url-routing,Yii,Url Routing,尝试使用yii开发restfullapi(这是第一个使用yii的项目) 在让URLManager正确路由调用时遇到问题: 'urlManager' => array( 'urlFormat' => 'path', 'showScriptName' => false, 'caseSensitive' => false, 'rules' => array( 'api/<co

尝试使用yii开发restfullapi(这是第一个使用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'),
        ),
    ),
每当我删除其中一条规则时,它都会起作用,但当我同时放入这两条规则时,它们都不起作用,我会得到异常 exception.CHttpException.404

 exception 'CHttpException' with message 'Unable to resolve the request
 "tezt".' in /yii-1.1.10/web/CWebApplication.php:280
这两天来一直在我的头上砰砰作响。可能在web上看到了URLManager上的所有示例和教程(尽管找不到对规则的直接和完整的解释)。但是,没有快乐

我做错什么了吗?这可能是我的盒子设置吗

试试这个

'api/<controller:\w+>' => array('api/<controller>/list', 'verb' => 'GET'),  
'api/'=>数组('api//list','verb'=>'GET'),

api是一个模块吗?

我尝试了这个,它成功了:

'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>',
        ),
在REST客户机中,您必须指定控制器名称,即使是默认控制器


我正在使用Yii 1.1.10,但我认为Yii从1.1.7开始就支持RESTful URL。

对于其他偶然发现这一点的人来说,它不起作用,因为规则是使用相同的键声明的,所以后一个规则覆盖了前一个规则

将来,在规则配置数组中声明模式:

array(
    'route',
    'pattern' =>'somePattern',
    'verb' =>'...',
),
array(
    'another/route',
    'pattern' =>'anotherPattern',
    'verb' =>'...',
),
'api'=>array('defaultController' => 'default',),
array(
    'route',
    'pattern' =>'somePattern',
    'verb' =>'...',
),
array(
    'another/route',
    'pattern' =>'anotherPattern',
    'verb' =>'...',
),