CakePHP-更改默认闪存布局

CakePHP-更改默认闪存布局,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我知道我可以通过在Elements文件夹中创建类似于custom_flash.ctp的东西来替换flash标记,并将其称为: $this->Session->setFlash('Hello', custom_flash) 但是,如果不添加第二个参数,如何使用自定义布局 $this->Session->setFlash('Hello') 我想我可以通过在Elements文件夹中有一个名为default.ctp的文件来替换默认值。但我不能 我希望代码尽可能简短。这就是为什

我知道我可以通过在Elements文件夹中创建类似于
custom_flash.ctp
的东西来替换flash标记,并将其称为:

$this->Session->setFlash('Hello', custom_flash)
但是,如果不添加第二个参数,如何使用自定义布局

$this->Session->setFlash('Hello')
我想我可以通过在Elements文件夹中有一个名为
default.ctp
的文件来替换默认值。但我不能

我希望代码尽可能简短。这就是为什么我在寻找这样做的方法

有解决办法吗?谢谢

我从中找到了答案

我们需要在
app/Controller/AppController.php

function beforeRender(){
    if ($this->Session->check('Message.flash')) {
        $flash = $this->Session->read('Message.flash');

        if ($flash['element'] == 'default') {
            $flash['element'] = 'fileNameOfYourCustomFlash';
            $this->Session->write('Message.flash', $flash);
        }
    }
}

它基本上是在
flash
中添加
元素
参数,但它还不存在。

尝试创建您的组件:

class MySessionComponent extends Session {
    public function setFlash($message) {
         return $this->setFlash($message, 'custom_flash');
    }
}
在控制器中,只需使用:

public $components = array('MySession');
$this->MySession->setFlash('Hello');

cakephp网站上解释了这一点

谢谢您的回答,但是更改
会话
对象将使我更改
蛋糕烘焙
中的所有默认代码。不,不会。所有使用$this->Session->someFunction()的“烘焙”代码都将从Cake core执行。所有$this->MySession->someFunction()都将从您的类(扩展会话类)中执行。哦,我明白了,谢谢您的解释。请参阅此以获得更好的答案。看看那个不被接受的。它谈到了别名。请注意,不鼓励这样做,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移,这些参考文献往往会过时)。请考虑在这里添加一个独立的概要,保持链接作为参考。这比接受的答案要好得多。创建一个完整的组件只是为了硬编码一个新的默认值,然后必须处理两个不同但基本相同的会话管理器,这时只需向setFlash添加第二个参数就可以完成整个任务。。。只是乱杀滥杀