在我的urlManager中,我有以下规则:
'urlManager' => array(
'urlFormat' => 'path',
'rules' => array(
'/<slug>/<controller:'w+>'=>'<controller>/index',
'/<slug>/<controller:'w+>/<action:'w+>'=>'<controller>/<action>',
'/<slug>/<controller:'w+>/<action:'w+>/<id:'d+>' => '<controller>/<action>',
),
),
所以我需要将loginUrl设置为重定向到动态url:
'user' => array(
'class' => 'WebUser',
'allowAutoLogin' => true,
'loginUrl' => array( '/<slug>/admin/login' ),
),
我如何重定向到动态url,如/test1/admin/login
和/test2/admin/login
,而不仅仅是/admin/login
和/*/admin/login
,我需要在url中使用通配符?这可能吗?
当您将以下代码放入components/controller.php时,
public function beforeAction($action) {
if (!isset($_GET['slug'])) {
$url = CMap::mergeArray(array(Yii::app()->controller->id . '/' . Yii::app()->controller->action->id, 'slug' => 'test1'), $_GET);
$this->redirect($url);
}
return parent::beforeAction($action);
}
和下面的代码配置/main.php作为
'rules' => array(
---
'/<slug>/<controller:'w+>/<action:'w+>'=>'<controller>/<action>',
'/<controller:'w+>/<action:'w+>'=>'<controller>/<action>',
'/<slug>/<controller:'w+>/<action:'w+>/<id:'d+>' => '<controller>/<action>',
'/<controller:'w+>/<action:'w+>/<id:'d+>' => '<controller>/<action>',
),
我认为你的问题会解决的。
我会这样做:
class Test1Module extends WebModule {
class Test2Module extends WebModule {
父类是这样的:
class WebModule extends CWebModule {
public function init() {
$slug = $this->getId();
Yii::app()->user->loginUrl = $slug.'/admin/login';
}
....
现在您可以使用UrlManager直接定位到您想要的位置
'/<slug>/admin/login>'=>'admin/login',
我希望你能理解