Как дать Flash-сообщению пользовательский класс CSS в торте 3

Я хочу дать Flash-сообщению пользовательский класс css в Cakephp 3, в моем контроллере (в данном случае отредактируйте) есть моя функция:

public function edit($id = null)
{
    $this->viewBuilder()->layout('personalizado');
    $user = $this->Users->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $user = $this->Users->patchEntity($user, $this->request->data);
        if ($this->Users->save($user)) {
            $this->Flash->success('Utilizador editado com sucesso.', 'default', ['class' => 'alert alert-success']);
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('Erro ao apagar utilizador, por favor tente de novo.'));
        }
    }
    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
}

Я добавил пользовательский css claas в эту строку:

$this->Flash->success('Utilizador editado com sucesso.', 'default', ['class' => 'alert alert-success']);

но не работает, заранее спасибо.


person Bruno Estevao    schedule 06.05.2016    source источник
comment
не работает — это неправильное описание проблемы! Даже если проблема может быть очевидной для людей, знакомых с внутренностями CakePHP, пожалуйста, всегда указывайте как можно точнее, что точно происходит и что вы ожидаете вместо этого. Покажите данные, с которыми вы работаете, контекст, ваши попытки отладки и возможные ошибки. Часто проблема решается сама собой при сборе этой информации.   -  person ndm    schedule 06.05.2016
comment
Спасибо за ваше объяснение, в следующий раз я буду более конкретным, в этом случае класс css не загружен, я попробую ответы ниже.   -  person Bruno Estevao    schedule 25.05.2016


Ответы (3)


Это не работает, потому что это не так, как это должно работать. Не просто бросайте вещи и надейтесь на лучшее, сначала прочитайте документацию, чтобы понять, как все должно быть сделано!

Варианта class просто нет.

Поваренная книга > Контроллеры > Компоненты > Flash > Настройка флэш-сообщений

Если вы хотите установить определенный класс для мгновенного сообщения об успешном выполнении, вам необходимо изменить элемент мгновенного сообщения, который находится в src/Template/Element/Flash/success.ctp, подобно тому, как показано в связанных документах.

Вы можете использовать параметр params для передачи пользовательских параметров и использования их в своих элементах, если вы хотите определять вещи на уровне контроллера.

person ndm    schedule 06.05.2016
comment
Спасибо за ваш вклад, в следующий раз я сделаю персонал, который вы упомянули. - person Bruno Estevao; 25.05.2016

Я полагаю, вы хотите загрузить оповещение с классом boostrap

Если настроить флэш-сообщение об успешном завершении, перейдите в src/Template/Flash/success.ctp.

и добавьте свои классы

<div class="alert alert-success" onclick="this.classList.add('hidden')">
  <strong><?= __('Success') ?>!</strong> <?= h($message) ?>
</div>
person Jacek B Budzynski    schedule 06.05.2016

Этот работает для меня.

Перейдите в src/Template/Element/
Создайте файл каталога с именем "Flash"
Поместите файл success.ctp и >error.ctp в этом файле каталога.
Итак, у вас есть 2 файла с именами success.ctp и error.ctp в каталоге src/Template/Element/Flash/.

поместите этот скрипт в свой src/Template/Element/Flash/success.ctp

<div class="alert alert-success alert-dismissable" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
    <?= strip_tags($message, '<br>') ?>
</div>

также поместите этот скрипт в свой src/Template/Element/Flash/error.ctp

<div class="alert alert-danger alert-dismissable" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
    <?= strip_tags($message, '<br>') ?>
</div>

Затем добавьте эту функцию флэш-скрипта в свой Контроллер.

$this->Flash->error(__("Your error message"));
return $this->redirect(['action' => 'index']);

для вашего флэш-сообщения об ошибке или этого ниже

$this->Flash->success(__("Your successed message"));
return $this->redirect(['action' => 'index']);

для вашего успешного флеш-сообщения.
Затем в файле view.ctp добавьте этот скрипт ниже

<?= $this->Flash->render() ?>

Не забудьте сначала загрузить FlashComponent в свой AppController.php.

Более подробные настройки находятся в этом< /а> страница. Проверьте это.

person Idhos    schedule 10.08.2017