pt0*_*pt0 2 validation cakephp flash-message cakephp-3.0
通过以下方式将消息传递给 flash 很简单:
$this->Flash->error(__('The user could not be saved. Please, try again.'));
Run Code Online (Sandbox Code Playgroud)
但是当出现更多错误时:
$package->errors();
Run Code Online (Sandbox Code Playgroud)
我只使用一个简单的 foreach 循环:
foreach ($package->errors() as $error=>$value)
{
foreach ($value as $single_error)
{
$error_array[] = ($single_error);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将它传递给一个 flash 元素:
$this->Flash->custom($error_array, [
'key' => 'custom']);
Run Code Online (Sandbox Code Playgroud)
并在闪存消息中:
if ($message > 0) {
foreach ($message as $m) {
echo h($m).'<br />';
}
} else {
echo h($message);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是处理一系列验证错误的更好方法。
如果有错误,我使用以下方法:
控制器:
$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]]);
Run Code Online (Sandbox Code Playgroud)
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; ?>
Run Code Online (Sandbox Code Playgroud)
结果:
对于任何感兴趣的人,我正在使用 MaterializeCSS。