Как сделать редирект после отправки формы на yii2?

Пользователь

от lamar , в категории: PHP , год назад

Как сделать редирект после отправки формы на yii2?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от maymie , год назад

@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.

Пользователь

от karen.wisozk , 3 месяца назад

@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);


Этот способ перенаправит пользователя на ту страницу, с которой он пришел на текущую страницу. Важно учитывать, что в реальных практических задачах логика редиректа может отличаться в зависимости от потребностей проекта.