@echizon

Как поменять url в yii2 при использование goBack()?

1) Пользователь зашёл на сайт, или на любую другую страницу, например: my-site.localhost/media/12
2) Пользователь выбирает город в шапке, его перебрасывает на my-site.localhost/branch/2
3) в actionBranch редирект делается на предыдущую страницу в шаге 1 ($this->goBack()).
4) Пользователь на той же странице. НО url остаётся my-site.localhost/branch/2.

Как можно это пофиксить это? Хотелось бы чтобы на 4 шаге был url из первой.

При выборе города в шапке сайте, отправляется запрос в actionBranch. И в нём я устанавливаю Cookie какой город выбрал пользователь, и после $this->goBack(). То есть actionBranch не рендерит страницу, а отправляет назад. В шаблоне header вызвается эта функция: Url::remember(); для запоминания предыдущей страницы.

Полный код контроллера
public function actionBranch($id)
    {
        if (!$id) {
            throw new HttpException(404, 'The requested page does not exist.');
        }
        $id = (int) $id;

        $branch = Branch::find()
            ->andWhere(['id' => $id])
            ->visibled()
            ->one();
        if (!$branch) {
            throw new NotFoundHttpException('Не найден выбранный филиал');
        }
        $cookies = Yii::$app->response->cookies;

        $cookies->add(new Cookie([
            'name' => 'branchId',
            'value' => $id,
        ]));

        return $this->goBack('/');
    }
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
kawabanga
@kawabanga
Я думаю, у вас goBack() ведет на страницу выбора языка с последующим редиректом на my-site.localhost/branch/2. Вы можете проверить это по Debug.

Т.е. как это работает логически.
Вы открыли страница1.
Там вы выбрали редирект1, который ведет на страница2.
У вас открыта страница2 и вы делаете goback() на редирект1, который ведет на страница2.

В вашем случае, я бы порекомендовал избавиться от goback(), и использовать другой способ запоминания страницы. Или немного переписать компонент сессии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы