Визуализация / перенаправление на другой взгляд с помощью портлетов
Вопрос
У меня есть портлет входа в систему и работает, который основан на это руководство. Это работает просто хорошо, однако, если есть ошибка с формой входа в систему, сообщения об ошибках отображаются в портлете, и они не очень заметны.
Портлет следует:
class UserLogin extends Portlet
{
public $title='Login';
protected function renderContent()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
$form->attributes=$_POST['LoginForm'];
if($form->validate())
$this->controller->refresh();
}
$this->render('userLogin',array('form'=>$form));
}
}
Я бы предпочел любую ошибку, чтобы вызвать попытку входа в систему перенаправить на полную форму входа в систему, где ошибки могут быть отображены заметно, и будет ясно, что пользователю что-то пошло не так.
Что-то вдоль линий:
if($form->validate())
$this->controller->refresh();
else
$this->render('login',array('form'=>$form));
Однако еще не правильно, и я не могу понять, как это сделать.
Решение
Вы можете попытаться использовать что-то вроде
else
{
Yii::app()->user->setFlash('login', 'Login error');
$this->controller->redirect(array('account/login'));
}
куда account/login
Пара контроллера / действия для отдельного входа в систему. CWebUser
Система сообщений Flash используется для доставки сообщения об ошибке в новое действие (см. Yii Cooknbook Как работать с флэш-сообщениями).