2015-06-21 122 views
0

在CakePHP 2.0,我可以通過使用檢查是否存在快閃消息CakePHP的3.0閃存消息

if($session->check('Message.flash')){...} 

據我所知,在CakePHP中3.0,我讀doc,我可以檢查是否存在通過使用閃光消息

佈局

echo $this->Flash->render('auth'); 

模板/用戶/登錄

echo $this->Flash->render(); 
if($this->request->is('flash')){...}else{...} 

但在我看來是當我添加上面的條件沒有顯示任何東西。我的控制器代碼低於

$this->Flash->error('The email address and/or password you specified are not correct.'); 
return $this->redirect(array('controller'=>'users', 'action' => 'login')); 

任何人都可以指向我還有什麼缺失?我想檢查是否在CakePHP 3.0中顯示了一條Flash消息。謝謝。

+0

我不知道我理解你爲什麼要檢查是否有一個提示信息?爲什麼不只是使用代碼來顯示它,如果它在那裏?另外,('flash')將被用於控制器中,並且用於檢測生成請求的用戶代理是否爲Flash,而不是您使用它的目的。 –

+0

感謝您的回覆。我想在登錄頁面顯示一條默認消息。如果出現閃光消息,我想用閃光消息替換默認消息。因此,我想在視圖中進行狀態檢查。不過,我可以在CakePHP 2.0中實現它。 – DANLEE

+0

通常,您會在Controller或其他地方檢查條件,然後根據結果設置Flash消息。然後,您只需顯示所需的Flash信息。最好將邏輯放在視圖之外以及它所屬的位置。 –

回答

0

您仍然可以在CakePHP 2中從會話中讀取該值。您可以通過請求對象訪問佈局中的會話。

$session = $this->request->session(); 
if ($session->check('Flash.flash')) {...} 

或者,如果你想檢查是否有「身份驗證」關鍵信息:

if ($session->read('Flash.flash.key' == 'auth')) {...} 

這屆數組現在的樣子與Flash,如果你想做些別的事情:

[ 
    ... 
    'Flash' => [ 
     'flash' => [ 
      'message' => 'The page has been saved.', 
      'key' => 'flash', 
      'element' => 'Flash/success', 
      'params' => [] 
     ] 
    ] 
    ... 
] 
0

通常我會這樣做,我會爲所有例外情況創建自定義Flash消息。

模板/的Elemen /閃光的地方custom_error.ctp

在你的控制器:

$this->Flash->customError('A message... ',['key' => 'cutom_error_key',]); 

並在視圖/模板:

$this->Flash->render('custom_error_key'); 
-1

在控制器動作

$this->Flash->success(__('The data has been saved.')); 

$this->Flash->error(__('The data could not be saved. Please, try again.')); 

任何地方放入查看或版式文件

<?php 
$class = 'message'; 
if (!empty($params['class'])) { 
    $class .= ' ' . $params['class']; 
} 
?> 
<div class="<?= h($class) ?>"><?= h($message) ?></div>