2016-07-18 103 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