从Validator循环错误然后在表单元素后面显示它们而不诉诸大量@if
子句的最佳方法是什么?
这不是很优雅,也不是DRY:
<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?
答案 0 :(得分:3)
我不知道任何包,但我只是创建自己的宏类,类似于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
<强> ExtendedInput.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;
}
}
<强> ExtenedInputFacade.php 强>
use Illuminate\Support\Facades\Facade;
class ExtendedInputFacade extends Facade {
protected static function getFacadeAccessor() { return 'extendedInput'; }
}
<强> ExtendedInputServiceProvider.php 强>
use Illuminate\Support\ServiceProvider;
class ExtendedInputServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('ExtendedInput', function()
{
return new ExtendedInput;
});
}
}
<强>配置/ app.php 强>
'providers' => [
'App\App\ExtendedInput\ExtendedInputServiceProvider',
// ..
],
答案 1 :(得分:0)
我通常会这样做:
<input name="name" />
{{ $errors->first('name', '<div class="error">:message</div>') }}
它会自动检查错误是否存在并显示结果。 希望这有帮助。