2015-10-16 61 views
3

我正在學習如何使用Slim框架,並且我在使用自定義中間件內的Flash消息時遇到了問題。超薄框架閃存和中間件

問題很簡單:我在中間件中使用了$app->flash('error', 'my message');,下一頁中沒有消息。

中間件的方式

這裏的偉大工程,是我的代碼:

中間件

class SessionMiddleware extends \Slim\Middleware { 

    public function call() { 

     $app = $this->app; 
     $req = $app->request; 


     if(!preg_match('#^(/public)#', $req->getPath())) { 
      if(isset($_SESSION['user']) && !empty($_SESSION['user'])) { 
       //Do something 
      } else { 
       $app->flash('error', 'You must be logged'); 
       if($req->getPath() != '/login') { 
        $app->redirect('/login'); 
       } 
      } 
     } 

     $this->next->call(); 

    } 

} 

登錄

<?php 
if(isset($_SESSION['slim.flash']['error'])) { 
    echo '<p class="alert alert-danger"><strong>Error</strong>: '.$_SESSION['slim.flash']['error'].'</p>'; 
} 
?> 

應用

$app = new \Slim\Slim(array(
    'mode' => 'development', 
    'debug' => true, 
    'templates.path' => './templates' 
)); 

$app->add(new \SessionMiddleware()); 

$app->get('/login', function() use($app) { 
    $app->render('login.php'); 
}); 

任何想法如何解決呢?

謝謝

+0

您應該意識到,在即將到來的第3版中,[正在刪除Flash消息](http://www.slimframework.com/docs/start/upgrade.html#flash-messages)。 – alexw

+1

你是否以session_start開始會話? –

+0

是Gustavo,我正在使用session_start(); on index.php – Ashraam

回答

0

我還看到'flash'和'flashNow'方法在中間件中不起作用。要添加Flash信息,我決定手動完成。它正在工作,但我知道這不是最好的方法。

$_SESSION['slim.flash']['error'] = 'message'; 
0

自己遇到這個問題。

由於Flash是一個應用程序中間件組件,並默認添加,並且添加任何自定義應用中間件組件之前,實際上不會當你的中間件被稱爲初始化。

做什麼@kkochanski所做的是哈克,但可能是唯一的選擇,短刪除/取消設置Flash和將其作爲最終的應用中間件組件的。