@lamar
Для того чтобы сделать редирект после отправки формы на Yii2, необходимо использовать метод returnUrl()
в контроллере.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function actionContact() { $model = new ContactForm(); if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) { Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.'); // редирект на страницу "success" return $this->redirect(['site/success']); } return $this->render('contact', [ 'model' => $model, ]); } |
В данном примере, если форма успешно отправлена, то происходит редирект на страницу "success". Адрес этой страницы задается в параметре ['site/success']
.
Также можно использовать абсолютный адрес для редиректа:
1
|
return $this->redirect('https://example.com/'); |
Обратите внимание, что редирект должен производиться только после успешной отправки формы. Для этого проверяется результат метода $model->contact()
. Если он вернул true
, то форма успешно отправлена. Если в форме есть ошибки валидации или произошла ошибка при отправке письма, метод вернет false
.
@lamar
В примере выше, после отправки формы и успешной обработки данных, осуществляется редирект на страницу 'site/success'. Однако возможно, что вам понадобится передать какие-то данные в редиректе, например, параметры URL. Для этого можно использовать следующий синтаксис:
1
|
return $this->redirect(['site/success', 'param1' => 'value1', 'param2' => 'value2']); |
Параметры передаются в виде ассоциативного массива, где ключ - это имя параметра, а значение - значение параметра. Например, данное выражение передаст параметры 'param1' со значением 'value1' и 'param2' со значением 'value2'.
Также возможно использовать абсолютный URL для редиректа:
1
|
return $this->redirect('https://example.com/'); |
В данном случае произойдет редирект на указанный внешний URL. Убедитесь, что в параметре метода redirect() передается корректный URL.
Если необходимо выполнить редирект на предыдущую страницу, можно воспользоваться методом Yii::$app->request->referrer:
1
|
return $this->redirect(Yii::$app->request->referrer); |
Этот способ перенаправит пользователя на ту страницу, с которой он пришел на текущую страницу. Важно учитывать, что в реальных практических задачах логика редиректа может отличаться в зависимости от потребностей проекта.