2016-05-06 5 views
0

Je veux donner un message Flash une classe CSS personnalisée dans CakePHP 3, il est ma fonction dans mon (modifier dans ce cas) contrôleur:Comment donner un message flash une classe CSS personnalisée dans le gâteau 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']); 
} 

J'ai ajouté les claas css personnalisé dans cette ligne:

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

mais ne fonctionne pas, merci à l'avance.

+0

"_n'a pas travaillé_" n'est pas une description correcte du problème! Même si le problème peut être évident pour les personnes qui connaissent les internes de CakePHP, veuillez toujours être aussi précis que possible quant à ce qui se passe réellement, et ce que vous attendez à la place. Montrez les données avec lesquelles vous travaillez, le contexte, les tentatives de débogage et les erreurs possibles. Souvent, le problème se résout lors de la collecte de ces informations. – ndm

+0

Merci pour votre explication, la prochaine fois je serai plus précis, dans ce cas la classe css n'est pas chargée, je vais essayer les réponses ci-dessous. –

Répondre

2
// 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> 
+1

Merci pour votre contribution, son fonctionnement comme je le veux ... –

2

Cela ne fonctionne pas parce que ce n'est pas comme ça que ça doit fonctionner. Ne jetez pas simplement des choses et espérez le meilleur, lisez d'abord la documentation pour comprendre comment les choses doivent être faites! Il n'existe aucune option class.

Cookbook > Controllers > Components > Flash > Setting Flash Messages

Si vous souhaitez définir une classe spécifique pour le message flash succès, alors vous devez modifier l'élément de message flash qui vit dans src/Template/Element/Flash/success.ctp, semblable à, comme indiqué dans les documents liés.

Vous pouvez utiliser l'option params pour passer des options personnalisées et les utiliser dans vos éléments si vous souhaitez définir des éléments au niveau du contrôleur.

+0

Merci pour votre contribution, la prochaine fois je ferai le personnel que vous avez mentionné. –

0

je suis suppose que vous voulez alerte de charge avec classe boostrap

Si le message flash succès customizate vous devriez aller à src/Template/Flash/success.ctp

et ajoutez vos classes

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

Celui-ci fonctionne pour moi.

Aller à src/Template/Element/
Créer un fichier répertoire appelé "flash"
Mettez votre success.ctp et error.ctp modèle dans ce fichier de répertoire.
Vous avez donc 2 fichiers appelés success.ctp et error.ctp dans le répertoire src/Template/Element/Flash/

mettre ce script dans votre src/modèle/Element/Flash/succès .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> 

aussi, mettre ce script dans votre src/modèle/Element/flash/erreur.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> 

Et Ensuite, ajoutez cette fonction de script flash dans votre Controller

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

pour votre message flash d'erreur ou ce soufflet

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

pour votre message flash successed.
Ensuite, dans votre view.ctp ajouter ce script ci-dessous

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

Ne pas oublier de charger FlashComponent dans votre AppController.php premier.

La configuration plus détaillée est dans la page this. Vérifiez-le.