Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有问题的flash消息带有不带Symfony的细枝_Php_Session_Twig_Flash Message - Fatal编程技术网

Php 有问题的flash消息带有不带Symfony的细枝

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

您好,我想在重定向后创建(post add)post或更新(post update)或删除(post是delete)时在会话中创建flash消息。我成功显示消息,但当我更新同一页时,消息再次出现,我想删除此消息。我试图取消设置($\u会话[$value]),但什么也没有。 在我的控制器中:

$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());