2015-01-14 2 views
3

Итак, у нас есть несколько контроллеров. Например, это будут AboutController, IndexController, AuthController и ContactController. Все они расширяют пользовательские AbstractController что Init() метод:Yii2, перенаправление после входа в систему. Избегание контроллера действие поведение

public function init() 
{ 
    if ($this->getUniqueID() != 'auth') { 
     Yii::$app->getUser()->setReturnUrl(Yii::$app->getRequest()->url); 
    } 

    parent::init(); 
} 

Этого Init() сохранят текущий URL в ReturnUrl. Влиять на это перенаправляется после входа на страницу, на которой пользователь просматривал (какая-то альтернатива логина ajax).

Как вы можете, мы избегаем «AuthController», но у меня проблема с другой - это поведение.

В ContactController (как в базовой установке Yii2) у нас есть поведение CaptchaAction. Поэтому, когда мы открываем /contact/index, наш returnUrl будет /contact/captcha?xxxx, и после входа в систему мы будем перенаправлены туда (до /contact/captcha?xxxx), и это проблема.

В этом примере я использую $this->getUniqueID() или может $this->id, но когда (относительно ручного) Я пытаюсь использовать $this->action это вернуть меня всегда null.

Итак, вопрос в том, как ... Как избежать какого-либо контроллера \ action \ поведения в методе init(), или, может быть, кто-то может предложить лучшее решение этого вопроса.

+0

Он дублируют: http://stackoverflow.com/questions/24100608/redirect-user-to-previous-page-after-auth-yii2 – TomaszKane

+0

@TomaszKane нет никакого решения для него , – user1954544

ответ

0

Я думаю, что вы можете использовать beforeAction вместе с Init()

Что я предлагаю держать Init() логики, как это, и установить beforeAction к вашему contactAction.

Заканчивать этот Link

Смежные вопросы