我是Yii的新人,我试图实现parseUrl来管理网址上的API版本。 我想将/api/1.0 / ...重定向到控制器apiV1.0。
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;
}
}
我很失落它的工作方式,有人可以帮助我吗?
答案 0 :(得分:1)
在你的函数中,正则表达式检查路径是否类似于“api / num_of_version / your_model / an_id”
因此,如果您的网址与此匹配,那么您必须设置获取值:
$_GET['apiversion'] = $matches[2];
$_GET['model'] = $matches[4];
$_GET['id'] = $matches[6];
根据版本的不同,您将返回优秀的控制器:
return "apiV" . $_GET['apiversion'] . "/view";
您需要了解的一些链接:
编辑:如果有一个特殊的地方你有些麻烦请现在就让我,我会尝试在这一点上再详细说明我的答案。