CakePHP自定义flash消息

时间:2011-11-03 05:05:00

标签: cakephp customization message

通常,$this->Session->setFlash(__('My message.'));

将输出:

<div id="flashMessage" class="message">
    My message.
</div>

如何更改,以便输出:

<p class="notification>
    My message.
</p>

代替?

5 个答案:

答案 0 :(得分:19)

如果查看源代码,您会看到SessionComponent方法的第二个参数是元素的名称:

function setFlash($message, $element = 'default', $params = array(), $key = 'flash')

您可以在视图/元素(或Cake2的Views / Elements)中创建一个名为'flash_notification.ctp'的文件

具有以下内容:

<p class="notification">
  <?php echo $message; ?>
</p>

并使用

$this->Session->setFlash(__('My message.'), 'flash_notification');

答案 1 :(得分:3)

根据cakephp flash message,您无需在视图中处理ID和类。您可以在setFlash中设置id和class,这很简单。

$this->Session->setFlash(__('My message.'), 'default', array('id' => 'flashMessage', 'class' => 'message'), 'message');

$this->Session->setFlash(__('My message.'), 'default', array('class' => 'notification'), 'notification');

在您看来。

echo $this->Session->flash('message');
echo $this->Session->flash('notification');

多数民众赞成。

答案 2 :(得分:0)

在app / element中创建.ctp文件(例如:flash.ctp)

<div class="alert alert-<?= (isset($alert)? $alert : 'info' ) ?>">
    <button type="button" class="close" data-dismiss="alert">×</button>
<center>    <?= (isset($message)? $message : 'Something went wrong' ) ?></center>
</div>

并使用

$this->Session->setFlash($message,'flash',array('alert'=>'info'));

定义类,在css文件中键入以自定义Flash消息 我希望这会有所帮助

答案 3 :(得分:0)

我认为目前的答案一般都不是闪存消息的好方法。

整个应用程序应该只有$this->setFlash('my message');,父视图或布局应决定如何呈现它(即使是使用元素)。

以下代码应位于布局中,可能位于<head>部分。

<?php
        $flashMessage = $this->Session->flash();
        if ( $flashMessage !== false) {
            echo $this->element('my_custom_flash_element', array(
                'message' => $flashMessage
            ));
        }
?>

布局捕获它,并将flash消息作为变量传递给元素'my_custom_flash_element'。

在元素内部你可以使用css进行所有花哨的渲染,甚至像toastr.js这些很酷的东西(我个人喜欢!)

示例:(my_custom_flash_element.ctp)

<script>
    $(document).ready(function() {
         <?php echo "toastr.warning('" . $message . "');"; ?>
    });
</script>

还可以通过@dereuromark

transient flash messages上查看这个精彩的概念

答案 4 :(得分:0)

我使用jquery找到了这个解决方法。

我在控制器if($var1 == null) { $this->Flash->error(__('Error message')); }

中有这段代码

在/app/View/Layouts/default.ctp中我把这段代码

$(document).ready(function() {  
    if($('#flashMessage').length) // Check if flashMessage exists
    {
       var message = $('#flashMessage').html(); // Copy text
       // if I send html tags in the flash message,I use this code to print html
       message = message.replace(/&lt;/g, '<'); 
       message = message.replace(/&gt;/g, '>');

        if( $('#flashMessage').hasClass("error") ) // Check if it has the error class
        {
            // Create a bootstrap alert warning and set the message
            $('#flashMessage').html("<div class='alert alert-warning' style='width:50%'>"+message+"</div>");
        }

        if( $('#flashMessage').hasClass("success") ) // Check if it has the sucess class
        {
            // Create a bootstrap alert sucess and set the message
            $('#flashMessage').html("<div class='alert alert-success' style='width:50%'>"+message+"</div>");
        }           
    }
});