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


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

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!