2012-10-25 44 views
1

Im新與Yii和我試圖實現parseUrl管理URL版本的URL。 我想將/api/1.0/...重定向到控制器apiV1.0。Yii Api版本urlManager w/parseUrl

Main.php(urlManager規則):

... 
array('class' => 'application.components.ApiVersion'), 
... 

ApiVersion.php:

<?php 
    class ApiVersion extends CBaseUrlRule 
    { 
    public $connectionID = 'db'; 

    public function createUrl($manager,$route,$params,$ampersand) 
    { 
     if ($route==='car/index') 
     { 
      if (isset($params['manufacturer'], $params['model'])) 
       return $params['manufacturer'] . '/' . $params['model']; 
      else if (isset($params['manufacturer'])) 
       return $params['manufacturer']; 
     } 
     return false; // this rule does not apply 
    } 

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) 
    { 
     if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) 
      $url = $match[1] . $match[2]; // BUILD YOUR URL (controllerName/actionName) 
      $this->redirect(array($url)); 
     } 
     return false; 
    } 
} 

林很失去了它是如何工作的,有人可以幫助我嗎?

回答

1

在你的函數,如果正則表達式檢查的路徑是一樣的東西「API/num_of_version/your_model/an_id」

所以,如果您的網址是符合這個你是在條件,你必須設置get值:

$_GET['apiversion'] = $matches[2]; 
$_GET['model'] = $matches[4]; 
$_GET['id'] = $matches[6]; 

並根據版本返回的良好控制:

return "apiV" . $_GET['apiversion'] . "/view"; 

一些鏈接,您需要了解:

編輯:如果有一個特定的點您有一些麻煩,請現在就放過我吧,我會盡力ellaborate多一點我的回答這一點。

+0

Hi darkheir。它仍然無法正常工作,我應該在函數createUrl中對嗎? –

+0

我編輯了第一篇文章。 –

+0

在編輯時,createUrl和parseUrl都不適合你需要做的事情!你只是從文檔中拿出來的! – darkheir