Я знаю, что этот вопрос старый, но, возможно, это поможет кому-то, так как я нигде не смог найти достойного ответа.
Как работает getReturnUrl
Установка возвращаемого URL по умолчаниюдля вашего приложения Yii требуется немного настроек.Как это работает «из коробки», вы задаете URL-адрес возврата по умолчанию при каждом его вызове:
Yii::app()->user->getReturnUrl('site/internal');
Идея заключается в том, что если пользователь посетит страницу, требующую аутентификации, он получитперенаправлены на страницу входа, но не раньше, чем сайт работает
Yii::app()->user->setReturnUrl('site/visitedpage');
Теперь, когда пользователь входит в систему, он будет возвращен на страницу, на которую он намеревался перейти.
Хотя мне нравятся эти функции, необходимость каждый раз задавать URL-адрес возврата по умолчанию - глупость.Если вы хотите изменить возвращаемый URL по умолчанию, вы должны найти его по всему коду.Я полагаю, вы могли бы установить значение в параметре сайта и вызвать
Yii::app()->user->getReturnUrl(Yii::app()->params['defaultReturnUrl']);
Не думаю, что мне нужно объяснять, почему это решение тоже раздражает.
Мое решение
Поэтому, когда getReturnUrl вызывается без каких-либо параметров, он возвращает либо «/index.php», либо просто «/».Это хорошо в некоторых случаях, но не всегда.Это лучше IMO.
Сначала расширьте класс CWebUser и добавьте следующие дополнения
class WebUser extends CWebUser {
// default return URL property
public defaultReturnUrl;
// override the getReturnUrl method
public function getReturnUrl($defaultUrl=NULL) {
if ($defaultUrl === NULL) {
$defaultReturnUrl = $this->defaultReturnUrl;
}
else {
$defaultReturnUrl = CHtml::normalizeUrl($defaultUrl);
}
return $this->getState('__returnUrl',$defaultReturnUrl);
}
}
Теперь давайте добавим пару элементов пользователю массив компонентов.
'user' => array(
'class' => 'WebUser',
'defaultReturnUrl' => 'site/internal'
)
Это не только позволяет вам установить URL-адрес возврата по умолчанию в конфигурации, но также поддерживает возможность установки другого URL-адреса возврата по умолчанию и использовать функциональность setReturnUrl.