У меня в проекте есть система авторизации пользователей. И мне бы хотелось бы немного поменять логику для авторизованных пользователей и нет. На текущий момент я делаю такую проверку в самих контроллерах и представлениях:
public function actionIndex()
{
if (Yii::app()->user->isGuest) {
.
.
.
} else {
.
.
}
}
<?php
if(Yii::app()->user->isGuest) {
print("Welcome back Guest!");
print("Your id is ".Yii::app()->user->id);
} else {
print("Welcome back ".Yii::app()->user->name);
print("Your id is ".Yii::app()->user->id);
}?>
Мне кажется этот подход не очень правильным, поскольку здесь мешается все в кучу и если логика для авторизаванных пользователей и нет сильно разнится, что будет полная каша. Было бы здорово если бы можно было создавать базовые контроллеры и представления с общей логикой и от них унаследовать классы для авторизованных пользователей и нет. Что-то вроде этого:
class SiteController extends Controller
{
}
class AuthSiteController extends SiteController
{
$this->render('indexAuth');
}
class NoAuthSiteController extends SiteController
{
$this->render('indexNoauth');
}
Кто что думает об этом? Может в Yii есть что-то подобное?
Не, я имел в виду переопределить в Controller вот эту штуку. Туда передается название вьюхи, которую надо рендерить, и можно ее подменять в зависимости от потребностей, а потом отдавать базовому контроллеру для фактического рендеринга.
Ну, роутер сделан как компонент, соответственно от него можно отнаследоваться или полностью подменить своим (в конфиге, по той же схеме, по которой CWebUser переопределяем).
Ну, это на случай, если потребуется полностью изменить пользовательскую часть.