2012-03-11 59 views
4

試圖用警予對問題的REST API的工作(即使用Yii的第一個項目)YII URLManager對問題的REST 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 

被敲我的頭agains這2現在幾天。可能在網絡上看到了URLManager上的所有示例和教程(儘管找不到對規則的直接和完整的解釋)。但是,沒有快樂。

我做錯了什麼?也許是我的箱子設置?

回答

0

試試這個

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

是API模塊?

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以來的REST風格的URL。

0

對於其他任何人在此發生失敗,它不起作用,因爲規則是使用相同的鍵來聲明的,所以後者的規則會覆蓋前者。

在未來,規則配置數組中聲明的圖案:

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