我在视图中有一个字段,如
<div>
<input type="text" name="new[0][description]" id="description-new-0">
<input type="text" name="new[0][amount]" id="amount-new-0">
</div>
<div>
<input type="text" name="new[1][description]" id="description-new-1">
<input type="text" name="new[1][amount]" id="amount-new-1">
</div>
&#13;
依此类推...所以你可以想象它是一个动态字段,每当你勾选添加按钮或其他任何东西时都会在表单中添加。
问题是如何验证这些动态字段并为每个字段返回正确的错误?
谢谢!
请注意这是Laravel 5,但是如果你有一个类似于这个的Laravel 4解决方案,我猜(真的猜)它会起作用。
谢谢你们!
答案 0 :(得分:6)
在文件夹中创建请求此表单的验证程序,如
<?php
use Illuminate\Foundation\Http\FormRequest;
class MultipleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rules = [
'description' => 'required|array',
];
if ($this->request->get('description')) {
foreach($this->request->get('description') as $key => $val)
{
$rules['description.'.$key] = 'required|min:7'; //example
}
}
return $rules;
}
public function messages()
{
$messages = [];
if ($this->request->get('description')) {
foreach ($this->request->get('description') as $key => $val) {
$messages['description.' . $key . '.min'] = 'Wrong field.';
$messages['description.' . $key . '.required'] = 'This field required.';
}
}
return $messages;
}
}
更多信息How To: Validate an array of form fields with Laravel
然后在视图中执行下一步
@if (Session::has('_old_input'))
@for ($i=0; $i<count(Session::get('_old_input.description')); $i++)
<div>
@if($errors->any() && Session::get('errors')->getBag('default')->has('description.' . $i))
<p class="">{{Session::get('errors')->getBag('default')->first('description.' . $i)}}</p>
@endif
<input type="text" name="new[][description]" id="description-new-{{$i}}" value="{{Session::get('_old_input.description.' . $i)}}">
<input type="text" name="new[][amount]" id="amount-new-{{$i}}" value="{{Session::get('_old_input.amount.' . $i)}}">
</div>
@endfor
@endif
所以你为带输入的每个块添加带错误消息的块。在我的例子中只处理了描述,金额你可以处理类似的描述 对于我的工作和看起来像
<强> UPD:强> Laravel 5.2版具有数组验证功能,因此您可以创建请求验证程序,如:
public function rules()
{
return [
'names.*' => 'required|max:50',
'emails.*' => 'required|max:100',
];
}
了解更多信息,请阅读DOC