我想知道我的url路由是否有一些逻辑,使用自定义编码php比使用protected/config/main.php
内的Yii urlManager更好。
这是我想要做的:
P.S。可读性和易于维护是我第一次考虑,所以我避免使用.htaccess(我的伙伴不知道.htaccess,只有php)
编辑:
我已经写了我的rounteController(对不起,不是干净的代码。我稍后会把它分解成函数)
public function actionIndex(){
$is_Admin = false;
$args = func_get_args ();
//Language handle
$arg_1 = strtolower ($args[0]);
if($arg_1 == 'fr' || $arg_1 == 'en' ){
setLanguage($arg_1);
array_shift($args);
}
//check if admin
$arg_1 = strtolower ($args[0]);
if($arg_1 == 'admin'){
$is_Admin = true;
array_shift($args);
//admin index
if(count($args) == 0){
$this->redirect(array('admin/'));
exit();
}
//controller in admin
$controllerName = strtolower ($args[0]);
if(count($args) == 1){
//controller only
$this->redirect(array('admin_'.$controllerName.'/'));
exit();
}elseif(count($args) == 2){
//controller + action
$controllerName = strtolower ($args[0]);
$actionName = strtolower ($args[1]);
$this->redirect(array('admin_'.$controllerName.'/'.$actionName));
exit;
}else{
//controller + action + parameter
$controllerName = strtolower ($args[0]);
$actionName = strtolower ($args[1]);
$para = $args[2];
if(is_numeric ($para){
// id parameter
$this->redirect(array(
'admin_'.$controllerName.'/'.$actionName,
'id'=>$para;
));
exit;
}else{
// string parameter
$this->redirect(array(
'admin_'.$controllerName.'/'.$actionName,
'str'=>$para;
));
exit;
}
}
}
//forum
$arg_1 = strtolower ($args[0]);
if($arg_1 == 'forum'){
if(count($args) < 2){
//only one more parameter after 'forum'
//rounte to 'forum' controller
$cateSlug = $arg_1 = strtolower ($args[1]);
$this->redirect(array(
'forum/index',
'cateSlug'=> $cateSlug)
);
exit();
}else{
//only one more parameter after 'forum'
//rounte to 'forumPost' controller
$cateSlug = strtolower ($args[1]);
$topicSlug = strtolower ($args[2]);
$this->redirect(array('
forumPost/index',
'cateSlug'=> $cateSlug,
'topicSlug'=> $topicSlug)
);
exit();
}
}
//----normal case ---
//site index
if(count($args) == 0){
$this->redirect(array('site/index'));
exit;
}
if(count($args) == 1){
//controller only
$controllerName = strtolower ($args[0]);
$this->redirect(array($controllerName.'/'));
exit;
}elseif(count($args) == 2){
//controller + action
$controllerName = strtolower ($args[0]);
$actionName = strtolower ($args[1]);
$this->redirect(array($controllerName.'/'.$actionName));
exit;
}else{
//controller + action + parameter
$controllerName = strtolower ($args[0]);
$actionName = strtolower ($args[1]);
$para = $args[2];
if(is_numeric ($para){
// id paremeter
$this->redirect(array(
$controllerName.'/'.$actionName,
'id'=>$para;
));
exit;
}else{
// string paremeter
$this->redirect(array(
$controllerName.'/'.$actionName,
'str'=>$para;
));
exit;
}
}
}
编辑2:
$ this-&gt; redirect()函数并非直接指向控制器....它仍然通过了思想urlManager .....
答案 0 :(得分:0)
我认为你已经意识到了模块:
管理员; 论坛;
然后你可以使用:
site.com/admin/ - admin panel
site.com/forum/ - forum
以及
site.com/site/index will be home page
这只是我决定的第一件事,如果您在一个应用程序中使用您的网络应用程序存在论坛,这个变体就会正确。