2015-08-28 1 views
2

Il est simple de passer un message à clignoter via:validation passe Cakephp3 (personnalisé) pour un message flash

$this->Flash->error(__('The user could not be saved. Please, try again.')); 

Mais quand il y a plus d'erreurs à partir de:

$package->errors(); 

J'utilise un simple foreach:

foreach ($package->errors() as $error=>$value) 
{ 
    foreach ($value as $single_error) 
    { 
     $error_array[] = ($single_error); 
    } 
} 

Puis je passe à un élément flash:

$this->Flash->custom($error_array, [ 
       'key' => 'custom']); 

Et dans le message flash:

if ($message > 0) { 
    foreach ($message as $m) { 
     echo h($m).'<br />'; 
    } 
} else { 
    echo h($message); 
} 

Je me demande c'est là une meilleure façon de gérer une série d'erreurs de validation.

Répondre

3

J'utilise la méthode suivante s'il y a des erreurs:

Controller:

$errors = $action->errors(); 
$errorMessages = []; 

array_walk_recursive($errors, function($a) use (&$errorMessages) { $errorMessages[] = $a; }); 

$this->Flash->error(__('Your action cannot be saved!'), ['params' => ['errors' => $errorMessages]]); 

Template/Element/Flash/error.tcp:

<?php if (isset($params) AND isset($params['errors'])) : ?> 
     <ul class="collection with-header"> 
      <li class="collection-header"><h5><?= __('The following errors occurred:') ?></h5></li> 
    <?php foreach ($params['errors'] as $error) : ?> 
      <li class="collection-item"><i class="material-icons">error</i><?= h($error) ?></li> 
    <?php endforeach; ?> 
     </ul> 
<?php endif; ?> 

Résultat:

result

Juste pour quelqu'un intéressé, j'utilise MaterialiseCSS.