代码之家  ›  专栏  ›  技术社区  ›  Bruno Estevao

如何在蛋糕3中为Flash消息提供自定义css类

  •  1
  • Bruno Estevao  · 技术社区  · 9 年前

    我想在Cakephp 3中为Flash消息提供一个自定义css类,在我的(本例中为编辑)控制器中有我的函数:

    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']);
    

    但不起作用,提前谢谢。

    4 回复  |  直到 9 年前
        1
  •  4
  •   Salines    9 年前
    // In your Controller
    $this->Flash->success('The user has been saved', [
        'params' => [
            'class' => 'alert alert-success'
        ]
    ]);
    
    // In your View
    <?= $this->Flash->render() ?>
    
    <!-- In src/Template/Element/Flash/success.ctp -->
    <div class="<?= h($params['class']) ?>">
        <?= h($message) ?>
    </div>
    
        2
  •  3
  •   ndm    9 年前

    它不起作用,因为它不应该这样工作。不要只是扔进东西,抱着最好的希望,首先阅读文档,了解事情是如何完成的!

    根本没有 class 选项

    Cookbook > Controllers > Components > Flash > Setting Flash Messages

    如果您想为成功的flash消息设置一个特定的类,那么您必须修改中的flashmessage元素 src/Template/Element/Flash/success.ctp ,类似于链接文档中所示。

    您可以使用 params 选项传递自定义选项,并在元素中使用它们(如果您想在控制器级别定义内容)。

        3
  •  0
  •   Jacek B Budzynski    9 年前

    我想你想要带助推级的负载警报

    如果自定义成功flash消息,您应该转到 src/Template/Flash/success.ctp

    并添加您的类

    <div class="alert alert-success" onclick="this.classList.add('hidden')">
      <strong><?= __('Success') ?>!</strong> <?= h($message) ?>
    </div>
    
        4
  •  0
  •   Idhos    8 年前

    这个适合我。

    src/模板/元素/
    创建名为“ 闪光 "
    把你的 成功.ctp 错误.ctp 该目录文件中的模板。
    所以你有两个文件名为 成功.ctp 错误.ctp 在目录中 src/模板/元素/闪存/

    把这个脚本放在你的 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']);
    

    为您成功的flash消息。
    然后,在您的 视图.ctp 在下面添加此脚本

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

    不要忘记在AppController中加载FlashComponent。首先是php。

    更多详细设置请参见 this 页过来看。