rosko
(A)
June 2, 2009, 11:19pm
1
Можно ли как-то сделать, чтобы один адрес мог обрабатываться двумя контроллерами?
Например, мне надо, чтобы главная страница обрабатывалась одним контроллером, если пользователь незалогинен, и другим - если наоборот.
Есть какие-нибудь идеи? Спасибо заранее.
KJedi
(Konstantin Mirin)
June 3, 2009, 2:57am
2
автоматически - никак. Можо сделать третий контроллер-диспетчер, которій будет, в зависимости от залогиненности создавать соответствующий констроллер и вызывать соответствующий экшн.
А вообще надо попробовать обойтись без этого.
KJedi
(Konstantin Mirin)
June 3, 2009, 3:13am
4
ну суть та же, только один из классов выступает диспетчером. Нормально, я не знаю задачи. может там красивее нельзя…
3an
(Zap Aibulatov)
June 3, 2009, 4:54am
5
а я бы написал примерно так:
class SiteController extends CController
{
public function actionIndex()
{
if (!Yii::app()->user->isGuest)
$this->redirect(Yii::user->returnUrl);
else
$this->render('index');
}
}
KJedi
(Konstantin Mirin)
June 3, 2009, 5:08am
6
и что бы было? Надо ж выполнить указанное действие, а не редиректить. Редирект - это идея, но ты ж редиректишь все время в один итот же урл, а надо на разные, в зависимости от действия.
phpdevmd
(Phpdevmd)
June 3, 2009, 7:09am
7
Я бы сделал тоже самое, только вместо
прям сюда же вписал бы код из MainController->actionIndex() - а
Zolter
(Zolter Od)
June 3, 2009, 7:35am
8
to phpdevmd
дублирование кода это не выход и в будущем очень тяжело в поддержке
rosko
(A)
June 3, 2009, 8:12am
9
Именно runController() запускается в самом Yii, когда обрабатывается адрес.
Я еще пробовал делать такое:
Но кажется такой вариант глючит в том плане, что MainController не знает где искать вью-файлы.
Так что, использую Yii::app()->runController(‘main/index’) и вам советую, если надо