fir*_*l70 5 php validation laravel-5
Laravel 5中的FormRequests是验证和授权的好方法.但是如果我必须验证包含一对多关系数据的请求,如何处理.例如,如果我有简单的发票应用程序.一张发票有很多服务.我的表单发布请求包含以下数据:
array (size=5)
'date' => string '2014-11-14' (length=10)
'num' => string '175' (length=3)
'client_id' => string '5' (length=1)
'vat' => string '1' (length=1)
'services' =>
array (size=2)
0 =>
array (size=3)
'description' => string 'Service 1' (length=36)
'value' => string '10' (length=2)
'items' => string '2' (length=1)
1 =>
array (size=3)
'description' => string 'Service 2' (length=11)
'value' => string '20' (length=2)
'items' => string '2' (length=1)
Run Code Online (Sandbox Code Playgroud)
现在在InvoiceFormRequest类中,我可以验证发票数据,但是如何继续服务:
<?php namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Response;
class InvoiceFormRequest extends FormRequest
{
public function rules()
{
return [
'date' => 'required',
'num' => 'required',
'client_id' => 'required',
'vat' => 'required'
];
}
public function authorize()
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
更新:我读过这里在Laravel 5.2将能写这样的事情:
'services.*.description' => 'required',
'services.*.value' => 'required:numeric',
'services.*.items' => 'required:integer'
Run Code Online (Sandbox Code Playgroud)
小智 1
您可以对规则中的“服务”参数使用“数组”选项,但这当然不会验证每个元素中包含的任何数据。
http://laravel.com/docs/master/validation#rule-array
因此,我可能建议使用像 Marwelln 所说的那样,带有自定义验证器以及“数组”规则。
你的规则最终可能会像这样
public function rules()
{
return [
'date' => 'required',
'num' => 'required',
'client_id' => 'required',
'vat' => 'required',
'services' => 'array|services'
];
}
Run Code Online (Sandbox Code Playgroud)
自定义验证器可能是这样的(您应该将其放在 ServiceProvider 中)
Validator::extend('services', function($attribute, $value, $parameters)
{
//foreach $value as $service
//validate $service['description'], $service['value'], $service['items']
//return true or false depending on the validation of each element
});
Run Code Online (Sandbox Code Playgroud)
希望它能帮助您找到正确的方向!
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |