Yii::$app->session->set() is not working in Yii2

58 Views Asked by At

The values are successfully registered in the database, but the flash values are not displayed on the redirect new page I also saved the log, but nothing is set in the session

main.php

'components' => [
        ...

        'session' => [
            'class' => 'yii\web\Session',
            'cookieParams' => [
                'httpOnly' => true,
                'lifetime' => 30 * 24 * 60 * 60, 
            ],
            'name' => 'advanced-frontend-rasha',
        ],

AbcController :

if($model->save()){
    $session = Yii::$app->session;
    $session->set('step', 'careers/step2');
    $session->set('registrationStep2', 2);
    $session->setFlash('success', $successMessage);


    return $this->redirect(['careers/step2']);

}else{
    Yii::$app->session->setFlash('error', $errorMessage);
    return $this->render('step1', ['model' => $model]);
}

or

if($model->save()){
    Yii::$app->session->set('step', 'careers/step2');
    Yii::$app->session->set('registrationStep2', 2);
    Yii::$app->session->setFlash('success', $successMessage);

    return $this->redirect(['careers/step2']);

}else{
   Yii::$app->session->setFlash('error', $errorMessage);
   return $this->render('step2', ['model' => $model]);
}

or

if($model->save()){
     Yii::$app->getSession()->set('step', 'careers/step2');
     Yii::$app->getSession()->set('registrationStep2', 2);
     Yii::$app->getSession()->setFlash('success', $successMessage);

     return $this->redirect(['careers/step2']);

 }else{
    Yii::$app->getSession()->setFlash('error', $errorMessage);
    return $this->render('step1', ['model' => $model]);
}

View :

<?php if (Yii::$app->session->hasFlash('success')) { ?>
 <div class="alert alert-success" role="alert">
 <p> <?= Yii::$app->session->getFlash('success') ?></p>
</div>
<?php } ?>
<?php if (Yii::$app->session->hasFlash('error')) { ?>
    <div class="alert alert-danger" role="alert">
    <p> <?= Yii::$app->session->getFlash("error") ?></p>
   </div>
<?php } ?>
$session = Yii::$app->session;

Yii::info('Session name: '.$date->date('Y/m/d H:i')  . $session->name, 'session');
Yii::info('Session : '.$date->date('Y/m/d H:i')  . $session->get('step'), 'session');
Yii::info('Session value2: '.$date->date('Y/m/d H:i') . $session->get('registrationStep2'), 'session');

Yii::info('All session values2: '.$date->date('Y/m/d H:i')  . print_r($session->getAllFlashes(), true), 'session');

app.log

2023-11-24 00:04:05 [::1][40][-][info][session] Session name: advanced-frontend-rasha in C:\xampp\htdocs\rasha\frontend\views\careers\step2.php:28 in C:\xampp\htdocs\rasha\frontend\controllers\CareersController.php:159 2023-11-24 00:04:05 [::1][40][-][info][session] Session value: in C:\xampp\htdocs\rasha\frontend\views\careers\step2.php:39 in C:\xampp\htdocs\rasha\frontend\controllers\CareersController.php:159 2023-11-24 00:04:05 [::1][40][-][info][session] Session value2: in C:\xampp\htdocs\rasha\frontend\views\careers\step2.php:40 in C:\xampp\htdocs\rasha\frontend\controllers\CareersController.php:159 2023-11-24 00:04:05 [::1][40][-][info][session] All session values2: Array ( )

1

There are 1 best solutions below

2
Serghei Leonenco On

You have to set 3rd parameter for the setFlash() method, to be able to show message when you redirect like this:

Yii::$app->session->setFlash('success', $successMessage, false);