循环遍历验证器中的错误,然后在表单元素之后立即显示它们,而无需求助于大量 @if
子句的最佳方法是什么?
这既不优雅也不干燥:
<input name="name" />
@if (isset($errors['name']))
<div class="error">{!! $errors['name'] !!}</div>
@endif
<input name="email" />
@if (isset($errors['email']))
<div class="error">{!! $errors['email'] !!}</div>
@endif
<input name="address" />
@if (isset($errors['address']))
<div class="error">{!! $errors['address'] !!}</div>
@endif
我想避免这种重复。有没有办法使用 PHP 数组或包来生成表单元素来处理整个过程,并在表单元素后面放置一个错误 div?
最佳答案
我不知道任何包,但我只会创建自己的宏类,类似于 HTML 构建器或表单构建器。
事实上,我可能会扩展 FormBuilder.php
并添加一些额外的方法,例如:
public function inputWithError($type, $name, $errors, $value = null, $options = array())
{
$errorString = '';
if(isset($errors[$name])) {
$errorString = '<div class="error">{$errors[$name]}</div>';
}
return $this->input($type, $name, $value, $options) . $errorString;
}
注意 FormBuilder 包可以在 here 找到
编辑
目录可能是:
/App/App/ExtendedInput
|
+- ExtendedInput.php
|
+- ExtendedInputFacade.php
|
+- ExtendedInputServiceProvider.php
扩展输入.php
use Illuminate\Html\FormBuilder;
class ExtendedInput extends FormBuilder
{
public function inputWithError($type, $name, $errors, $value = null, $options = array())
{
$errorString = '';
if(isset($errors[$name])) {
$errorString = '<div class="error">{$errors[$name]}</div>';
}
return $this->input($type, $name, $value, $options) . $errorString;
}
}
扩展输入外观.php
use Illuminate\Support\Facades\Facade;
class ExtendedInputFacade extends Facade {
protected static function getFacadeAccessor() { return 'extendedInput'; }
}
扩展输入服务提供商.php
use Illuminate\Support\ServiceProvider;
class ExtendedInputServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('ExtendedInput', function()
{
return new ExtendedInput;
});
}
}
config/app.php
'providers' => [
'App\App\ExtendedInput\ExtendedInputServiceProvider',
// ..
],
关于validation - 在 View 中呈现验证错误,避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028715/