Как перегрузить FLASH MESSAGE по умолчанию для cakePHP - PullRequest
4 голосов
/ 28 августа 2010

для $this->Session->setFlash('this is message','flash_error'); вас нужно только создать flash_error.ctp в папке элементов, чтобы иметь другой вид.

Но что с $this->Session->setFlash('this is message')? Как изменить стандартную раскладку? Я не хочу изменять его с помощью CSS или JavaScript.

Ответы [ 5 ]

13 голосов
/ 30 августа 2010

Laheab ответ правильный.Но вы можете переопределить его, используя функцию AppController beforeRender.В вашем app/app_controller.php напишите эту функцию:

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

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

Она заменит элемент флэш-памяти «по умолчанию» на «flash_error».Затем в app/views/elements создать flash_error.ctp

2 голосов
/ 19 ноября 2012

HTML-код для сообщений Flash выводится в методе flash класса SessionHelper. Я считаю, что самый простой способ добиться того, что вы пытаетесь сделать, это переопределить основной класс SessionHelper. Для этого

Копировать lib / Cake / View / Helper / SessionHelper.php в app / View / Helper / SessionHelper.php

Cake теперь будет использовать класс SessionHelper в вашем приложении, а не собственный. Теперь вы можете обновить метод flash для вывода нужного HTML-кода. В строке 136 вы увидите это:

$out = '<div id="' . $key . 'Message" class="' . $class . '">' . $message . '</div>';

Например, если я использую Twitter Bootstrap, я обновлю эту строку так:

$out = '<div class="alert fade in"><a class="close" data-dismiss="alert" href="#">&times;</a>' . $message . '</div>';
1 голос
/ 28 августа 2010

Согласно Запись в книге CakePHP на flash () :

<?= $session->flash(); ?>

в файле просмотра выводит:

<div id='flashMessage' class='message'>My Message</div>

Так что нечего переопределять, кроме CSS для этого id в cake.generic.css.

Надеюсь, я правильно понял вопрос. =)

0 голосов
/ 11 февраля 2011

Вы не можете переопределить HTML-код по умолчанию для флеш-сообщения. Я сделал следующее: создал следующую функцию в app_controller:

protected function _f($message, $url=false) {
    $this->Session->setFlash($message,'message');
    if($url) $this->redirect($url);
}

Создан мой собственный шаблон message.ctp в представлениях / элементах.

Затем использовал функцию _f, включая все контроллеры:

$this->_f('This is a flash message','/page_to_redirect/');
0 голосов
/ 29 августа 2010

Вы пытались создать default.ctp в папке элементов?

Это может быть тем, что вы хотели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...