probleme de message flash avec twig sans Symfony

Par Thomas Da Silva, il y a 5 ans


Bonjour,
j'aimerai creer des message flash en session quand je creer par exemple un post ou que je le modifie ou que je le supprime exemple: le post a été ajouté. j'arrive a afficher le message seulement quand j'actualise la meme page j'ai encore le message or j'aimerai qu'il s'enleve. J'ai essayé de unset($_session[$value]) mais rien y fait.
dans mon controller:

PHPSession::get('succes', 'comment add'); header('location: /blog/comment/'.$postid); exit;

PHPSession est ma class session:

class PHPSession implements SessionInterface { private function ensureStarted() { if (session_status() === PHP_SESSION_NONE){ session_start(); } } public static function get(string $key, $value, $default = null) { self::ensureStarted(); $_SESSION[$key] = $value; if (array_key_exists($key, $_SESSION)) { return $_SESSION[$key]; } return $default; }

et dans ma twig view:

{% block body %} {% if _session.succes %} <div class="alert alert-success mt-4" role="alert"> {{ _session.succes }} </div> {% endif %}

dans ma view: _session = $_SESSION modifier dans addGlobal dans ma twig class

$this->twig->addGlobal('_session', $_SESSION);

mais je ne sais pas ou mettre le unset session pour supprimer la session apres le flash message. si quelqu'un peut m'aider, je lui en serais reconnaissant!
merci!

2 réponses

thugg, il y a 5 ans

Tu a essayé d'effacer plutôt la clé que la valeur : unset($_SESSION[$key]) ?

Thomas Da Silva, il y a 5 ans

J'ai reglé mon probleme: voici la class PHPSession si quelqu'un le souhaite :

<?php namespace App\tool; class PHPSession { protected $flash = []; public function __construct() { $this->ensureStarted(); } private function ensureStarted() { if (session_status() === PHP_SESSION_NONE) session_start(); } public function set($key, $value) { $_SESSION[$key] = $value; return $this; } public function get(string $key, $default = null) { return $_SESSION[$key] ?? $default; } public function getFlashMessage(string $key, $default = null) { if (!isset($this->flash[$key])) { $message = $this->get($key, $default); unset($_SESSION[$key]); $this->flash[$key] = $message; } return $this->flash[$key]; } public function redirect(string $url, $param = null) { header('location: '.$url.$param); exit; } }

Et du coup dans le controller j'appel la function set :

$php_session->set('stop', 'Vous n\'avez pas acces a cette page.');

et dans ma vue :

{% if _flash.getFlashMessage('stop') %} <div class="alert alert-success mt-4" role="alert"> <p>{{ _flash.getFlashMessage('stop') }}</p> </div> {% endif %}

ps: je ne sais pas fermer le sujet je suis nouveaux sur le site!