Сессии, редирект в виджетах, вставленных через yii2-shortcodes

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
delfi
Сообщения: 21
Зарегистрирован: 2012.07.19, 07:20

Сессии, редирект в виджетах, вставленных через yii2-shortcodes

Сообщение delfi »

В продолжение ветки viewtopic.php?t=31574

Сделал вывод формы обратной связи. После успешной отправки необходим редирект и внесение в сессию значения, позволяющего после редиректа во view показать сообщение об успешной отправке.

Однако, столкнулся со следующей проблемой - не записываются данные в сессию. Полагаю, что проблема в том, что на момент обработки виджета - мы уже выдали данные в браузер, т.е. заголовки не правятся, хотя сам редирект происходит ( $this->view->context->redirect(''); как делает редирект?)

Для тестов делаю такое

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

  
  public function run()
    {
        $model = new \app\models\ContactForm();

        var_dump(Yii::$app->session->getFlash('contactFormSubmitted'));
        var_dump($_SESSION);

        $_SESSION['test'] = 1;
        Yii::$app->end();
После перезапуска в сессии нету значения test.

Сам код виджета:

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

class ContactForm extends \yii\base\Widget
{
    /**
     * Renders the widget
     * @return string the rendering result of the widget.
     */
    public function run()
    {
        $model = new \app\models\ContactForm();
        
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['admin.email'])) {
            Yii::$app->session->setFlash('contactFormSubmitted', 1);
            $this->view->context->redirect('');
            Yii::$app->end();
        }
        return $this->render('contact-form', [
            'model' => $model,
        ]);
    }
}
Есть мысли, что сделано не так?

UPD. Заметил еще странность - если выйти из аккаунта, то работает нормально все, в сессию сохраняется тестовое значение.
Ответить