2012-10-25 46 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