Yii::$app->user->returnUrl

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Yii::$app->user->returnUrl

Сообщение futbolim »

Приветствую. Стоит задача сохранять каждый запрос пользователя в сессию, чтобы потом отправить его назад. Например, мы с любой страницы можем прийти на регистрацию. Отдельно в каждом action-е не хочется писать одно и то же сохранение returnUrl. Как это сделать один раз?
Попробовал так:

Код: Выделить всё

$app->on(Application::EVENT_AFTER_REQUEST, function ($event) use ($app) {
            $pathInfo = $app->request->pathInfo;
            $app->user->returnUrl = '/' . $pathInfo;
        });
Но так бред. Так туда ложится и /site/captcha и /debug/default/toolbar и так далее. Кто как делает?
Аватара пользователя
NeverDie
Сообщения: 70
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: Yii::$app->user->returnUrl

Сообщение NeverDie »

Вижу несколько вариантов.
1) Сделать behavior, подключать только к нужным контроллерам. Туда же можно как переменную сделать список экшенов, которые не будут учавтсвовать в этом.
2) Наследоваться от нового контроллера, куда вписать новый ф-ционал. (Опять же, там где необходимо).
3) Подписать yii\filters\AccessRule. Сделать для экшенов какой-либо новый фильтр, по которму будет видно, что он учавствует в задании. Новый AccessRules можно внедрить через DI
Можно дополнительно сделать фильтры (если аякс обращение, то ничего не делаем) и тд
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Yii::$app->user->returnUrl

Сообщение futbolim »

Все 3 варианта подразумевают дописывание новых экшенов (чего-то другого нового) по мере их появления. Именно этого я и не хотел. Но, похоже, никак это не обойти. Спасибо.
Аватара пользователя
NeverDie
Сообщения: 70
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: Yii::$app->user->returnUrl

Сообщение NeverDie »

Дописать все равно придется, вопрос лишь где. Добавить еще 1 поведение в контроллер мне кажется самым оптимальным вариантом
Ответить