尝试使用yii(使用yii的第一个项目)处理RESTfull API
让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'),
),
),
尝试使用它(这不是完整的片段,我有PUT / DELETE等的调度员。 但是它不起作用......在绝望中,我甚至尝试了一些简单的事情:
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'caseSensitive' => false,
'rules' => array(
'tezt' => array('landing/beta', 'verb' => 'GET'),
'tezt' => array('landing', 'verb' => 'POST'),
),
),
每当我删除其中一条规则时,它都有效,但是当我把两条规则都放进去时,它们都不起作用,我得到了例外 exception.CHttpException.404
exception 'CHttpException' with message 'Unable to resolve the request
"tezt".' in /yii-1.1.10/web/CWebApplication.php:280
现在再次敲打我的脑袋2天了。可能在Web上看到了关于URLManager的所有示例和教程(虽然找不到对规则的直接和完整的解释)。但是,没有快乐。
我做错了吗?这是我的盒子设置吗?
答案 0 :(得分: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>',
),
“api”是modules
部分中配置为
'api'=>array('defaultController' => 'default',),
在REST客户端中,您必须指定控制器名称,即使对于默认控制器也是如此。
我正在使用Yii 1.1.10,但我认为Yii支持自1.1.7以来的RESTful URL。
答案 1 :(得分:0)
试试这个
'api/<controller:\w+>' => array('api/<controller>/list', 'verb' => 'GET'),
是api模块吗?
答案 2 :(得分:0)
对于其他任何偶然发现错误的人来说,它不起作用,因为规则是使用相同的密钥声明的,所以后一条规则覆盖了前者。
将来,在规则配置数组中声明模式:
array(
'route',
'pattern' =>'somePattern',
'verb' =>'...',
),
array(
'another/route',
'pattern' =>'anotherPattern',
'verb' =>'...',
),