Php 有问题的flash消息带有不带Symfony的细枝
您好,我想在重定向后创建(post add)post或更新(post update)或删除(post是delete)时在会话中创建flash消息。我成功显示消息,但当我更新同一页时,消息再次出现,我想删除此消息。我试图取消设置($\u会话[$value]),但什么也没有。 在我的控制器中:Php 有问题的flash消息带有不带Symfony的细枝,php,session,twig,flash-message,Php,Session,Twig,Flash Message,您好,我想在重定向后创建(post add)post或更新(post update)或删除(post是delete)时在会话中创建flash消息。我成功显示消息,但当我更新同一页时,消息再次出现,我想删除此消息。我试图取消设置($\u会话[$value]),但什么也没有。 在我的控制器中: $phpsession = new PHPSession(); $flashmessage = $phpsession->get('succes', 'comment added
$phpsession = new PHPSession();
$flashmessage = $phpsession->get('succes', 'comment added');
header('location: /blog/comment/'.$postid);
exit;
PHPSession是我的课程:
class PHPSession
{
受保护的$flash=[]
public function __construct(){
$this->ensureStarted();
}
private function ensureStarted() {
if (session_status() === PHP_SESSION_NONE){
session_start();
}
}
public function get(string $key, $value, $default = null)
{
$_SESSION[$key] = $value;
return isset($_SESSION[$key]) ? $_SESSION[$key] : $default;
}
public function getFlashMessage(string $key, $value, $default = null) {
if (!isset($this->flash[$key])) {
$message = $this->get($key, $value, $default);
unset($_SESSION[$key]);
$this->flash[$key] = $message;
}
return $this->flash[$key];
}
}
在我看来:
{% if flash.getFlashMessage('succes', 'comment added') %}
<div class="alert alert-success mt-4" role="alert">
<p>ok</p>
</div>
{% endif %}
但我不知道在flash消息之后在哪里可以取消删除会话的会话设置。
如果有人能帮我,
我将感谢他。thank's您需要将您的类PHPSession传递到模板,而不是传递超级全局
$\u会话
$this->twig->addGlobal('u session',new PHPSession());
另外,我会将您的ensurerestarted()
调用移动到类的构造函数中,如果您在get
函数中执行此操作,则可能已经有输出,从而阻止会话启动。还可以删除static
方法,此处不需要这些方法
似乎您正在使用这个类作为会话包装器,所以我想添加flash消息,我建议您添加一个额外的函数getFlash
,它可以取消调用变量的设置
(请记住,您没有向我们展示接口“SessionInterface”的约束)
为什么PHPSession::get在会话中设置$vaule<代码>$\u会话[$key]=$value代码>。据我所知,Twig获得了$\u会话的副本,而且$\u会话与$\u会话不同。您在任何地方都没有$\u会话变量。在你写的问题中:unset($\u session[$value])
-为什么$value,这不应该是$key吗?我要做的是使用set/get/getAndRemove方法创建会话类,将该类的对象传递给您的小树枝,然后只需调用Session.getAndRemove('success')
Session[$key]=$value,但在我的控制器中,我调用get或getAndRemove方法@blahyI简化了我的代码,删除了我不用的接口“SessionInterface”,并为flash消息添加了一个方法。但是,即使我没有启动添加评论的操作,该消息也会出现。甚至删除它保留的会话。问题是,您必须在我的控制器中调用我的类PHPSession的get方法:$PHPSession=new PHPSession()$flashmessage=$phpsession->get('success','comment added')因为即使在我的视图中没有这个调用,它也会每次显示它:{%if flash.getFlashMessage('succes','comment added')%}
@好了,谢谢你的帮助真的很感谢@DarkBee
$this->twig->addGlobal('flash', new PHPSession());