Программирование, веб-кодинг

Yii2: Возврат на предыдущую страницу (перенаправление назад)

Полезно вернуть пользователя после авторизации на ту страницу, на которой он был до этого.

В контроллере

Используем referrer, проверяем его на null:

return $this->redirect(Yii::$app->request->referrer ?: Yii::$app->homeUrl);

То же можно сделать с помощью метода yii\web\Response goBack ( $defaultUrl = null ):

return $this->goBack();


В другом месте

Метод goBack() доступен только в контроллерах и их наследниках (\yii\base\Controller).Для замены используем код.

Используем вместо $this конструкцию Yii::$app->response->redirect

Yii::$app->getResponse()->redirect(Yii::$app->getUser()->getReturnUrl($defaultUrl));


В конфиге

Если вы использете расширение, например, dektrium/user, то можно вынести перенаправление в конфиг в Security:

'modules' => [
	    'user' => [
	        'class' => \dektrium\user\Module::className(),
...			
			'controllerMap' => [
				'profile' => 'app\controllers\user\ProfileController',
				'settings' => 'app\controllers\user\SettingsController',
				'security' => [
					'class' => 'app\controllers\user\SecurityController', //\dektrium\user\controllers\SecurityController
					'on ' . \dektrium\user\controllers\SecurityController::EVENT_AFTER_LOGIN => function ($e) {
						
						if (Yii::$app->user->can('admin')) {
							Yii::$app->getResponse()->redirect(Yii::$app->getUser()->getReturnUrl());
						}
					}
				],

SecurityController, создаёте в своем пространстве контроллеров и наследуете от базового контроллера в расширении user.