2016-07-18 104 views
0

我想知道,什么是在PHP中为用户存储消息的最佳方式。随着信息我的意思是成功的像哪里存储用户在PHP中的错误/信息消息?

认证

请输入一个有效的E-mail地址

目前我工作的一个项目中,它们存储在$_SESSION变量中,但我认为这不是一个好的解决方案。

简短的解释我是如何做到这一点的那一刻(类Message是由我创建)

$_SESSION["msg"][] = new Message("..."); 

foreach ($_SESSION ["msg"] as $msg) : 
    echo $msg->getText(); 
endforeach; 

unset ($_SESSION ["msg"]); 

这是完整的代码只是一个简化版本,但你应该明白。

编辑:忘了说,我正在使用MVC框架,并希望从输出拼写逻辑。

+0

据我所知,这是存储一个正确的方法和显示器(闪存)消息。在POST/redirect/GET环境中非常有用 – DarkBee

+0

@DarkBee所以会话可以用于这个吗?我担心这实际上不是正确的方式? – PrototypeX7

+1

是的,这是常用的。 [Symfony](https://knpuniversity.com/screencast/symfony2-ep2/flash-message)也使用会话。 – DarkBee

回答

2

人们只能推测你的Message类的性质/内容。但是,在这里;试图模拟一个名为Message的类的模型;您的视图脚本中的用法显示在类下面。确保$_SESSION是两个脚本活跃....也许,这可以阐明如何去你的独特情况下,一些新的光:

<?php 

     //FIRST CHECK IF SESSION EXIST BEFORE STARTING IT: 
     if (session_status() == PHP_SESSION_NONE || session_id() == '') { 
      session_start(); 
     } 

     class Message { 

      protected $msg; 

      public function __construct() { 
       if(!isset($_SESSION['msg'])){ 
        $_SESSION['msg'] = array(); 
       } 
      } 

      public function setText($message){ 
       if(!in_array($message, $_SESSION['msg'])){ 
        $_SESSION['msg'][] = $message; 
       } 
      } 

      public function getText(){ 
       return "Some Logic for getting Message"; 
      } 
     } 
     ?> 


     <?php 
      // INSIDE OF YOUR VIEW SCRIPT; AT THE VERY TOP, ENABLE SESSION AS WELL: 

      //FIRST CHECK IF SESSION EXIST BEFORE STARTING IT: 
      if (session_status() == PHP_SESSION_NONE || session_id() == '') { 
       session_start(); 
      } 

      // THEN LOOP THROUGH THE SESSION DATA FOR MESSAGES TO BE DISPLAYED 
      $msg = new Message(); 
      if(isset($_SESSION['msg'])) { 
       foreach ($_SESSION ["msg"] as $msg) : 
        echo $msg->getText(); 
       endforeach; 

       unset ($_SESSION ["msg"]); 
      } 
+0

这实际上是一个更好的主意,谢谢 – PrototypeX7