Cakephp3 проходит (пользовательскую) проверку на флэш-сообщение

Просто передать сообщение во flash через:

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

Но когда ошибок больше от:

$package->errors();

Я использую простой цикл foreach:

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

Затем я передаю его элементу flash:

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

И во флеш-сообщении:

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

Интересно, это лучший способ обработки массива ошибок проверки.


person pt0    schedule 28.08.2015    source источник


Ответы (1)


Я использую следующий метод, если есть ошибки:

Контроллер:

$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; ?>

Результат:

результат

Просто для всех, кто заинтересован, я использую MaterializeCSS.

person hytromo    schedule 31.08.2015