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!
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!