这里已经问过这个问题,需要使用laravel的先前版本,但尚未回答。
我有一个html form
使用三个不同的验证的Form Request Validations
。我能够做到这一点。但是,问题是,表单验证是一一进行的。不在同一时间。
如果第一个表单请求引发验证错误,则该表单将返回至view
其他两个表单,因此不会进行评估,因此无法向用户显示适当的验证错误。
我要的是:验证表单与三个表单验证请求rules
在同一时间。
控制器:
public function store(TransportationRequest $request1, PurchaseRequest $request2, SaleRequest $request3)
{
//do actions here
}
我已经尝试过一个接一个地继承表单请求,但是无法成功。
编辑:
更具体地讲我的问题:
我有三个独立的形式purchase
,transporataion
以及sale
其使用单独计价PurchaseRequest
,TransportationRequest
并且SaleRequest
对单个操作。
但是有一个特殊情况,在一个单一的形式处理一个purchase
,transporataion
和一个sale
。我想结合使用三个表单请求规则来验证表单,因为我不想再次编写相同的验证规则。
这个
注意:单独形式和组合形式中的字段相同。
谢谢..
Illuminate\Validation\ValidationException
验证失败时,FormRequest会抛出一个异常,该异常具有一个redirectTo
方法,然后异常Handler
从那里执行重定向。
您可以通过在try / catch块中的控制器中手动运行Form Requests来实现所需的行为,该try / catch块捕获错误并在重定向之前合并错误包,或者如果必须通过Laravel将其注入到控制器中来运行它们,则您可以将需要添加您自己的异常处理程序,该异常处理程序将捕获所有错误,将它们组合在一起,然后在最终的Form Request运行后重定向。
但是,值得注意的是,这两种方法都不是很好:它们很麻烦,并且会给您带来比解决方案更多的问题。如果您想编写一个可维护的应用程序,则应尽量遵循Laravel的工作方式。
存在一个用于验证表单的表单请求,因此,每个表单都应该有一个表单请求,如果您希望根据不同的规则集来构成一个表单请求,则应在表单请求内完成,例如:
php artisan make:request StoreMultipleForm
从rules
方法中StoreMultipleForm
获取rules
每个其他表单请求的,然后将它们一起返回,例如:
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$formRequests = [
TransportationRequest::class,
PurchaseRequest::class,
SaleRequest::class
];
$rules = [];
foreach ($formRequests as $source) {
$rules = array_merge(
$rules,
(new $source)->rules()
);
}
return $rules;
}
在控制器中使用新的组合表单请求,例如:
public function store(StoreMultipleForm $request)
{
// Do actions here.
}
这种方法的优点是它是独立的,它遵循一个表单请求期望的一个表单,不需要更改要合并的表单请求,并且如果需要添加此表单唯一的其他规则,则可以可以这样做而无需创建另一个表单请求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句