Laravel:动态字段验证

时间:2018-02-08 10:17:18

标签: php validation laravel-5

我有动态生成的表单,我想在不同类型的字段中应用特定的验证规则。

我可以动态创建这种形式:

  • 2个输入和1个textarea
  • 1复选框,2选择
  • 1个输入和2个复选框
  • ...

这样处理

@foreach( $form->fields as $field )

    @if( $field->type == 'input' )

            {!! Form::label($field->id, $field->title) !!}
            {!! Form::text($field->id, null, ['class' => 'form-control', 'placeholder' => $field->title]) !!}

    @elseif( $field->type == 'select' )    

            {!! Form::label($field->id, $field->title) !!}
            {!! Form::select($field->id, $field->options->pluck('description','id')->toArray(), null,  ['class' => 'form-control']) !!}

    @elsif ...

    @endif

@endforeach

我有这段代码

public function storeDynamic(Request $request)
{

    foreach ($request->except('_token') as $field_id => $value) 
    {
        $type = \App\Field::find( $field_id )->type;

        switch ( $type ) 
        {
            case 'input':
                //required
                break;

            case 'select':
                //required|max:255
                break;

             ...

        }
    }

    //Store in DB
    //Flash confirmation message
    //Redirect
}

通常我会使用这种代码进行验证

$this->validate($request, [  
    'title' => 'required|max:145',
    'description' => 'max:255'
]);

我确定laravel有一种神奇的方法可以做到这一点,但我无法在the documentation中找到任何内容。

那么可以通过我的循环逐个验证字段吗?

修改

我在validateAttribute($attribute, $rule)

下找到了laravel/vendor/laravel/framework/src/Illuminate/Validation/Validator.php功能

我认为这就是我的需要,但我不知道如何将其导入我的控制器。我尝试了很多像

这样的东西

\Illuminate\Validation\Validator::validateAttribute()\Illuminate\Support\Facades\Validator::validateAttribute()

但这不起作用。

0 个答案:

没有答案