Laravel 5.5-同时验证多个表单请求

iamab.in

这里已经问这个问题,需要使用laravel的先前版本,但尚未回答。

我有一个html form使用三个不同的验证的Form Request Validations我能够做到这一点。但是,问题是,表单验证是一一进行的。不在同一时间。

如果第一个表单请求引发验证错误,则该表单将返回至view其他两个表单,因此不会进行评估,因此无法向用户显示适当的验证错误。

我要的是:验证表单与三个表单验证请求rules在同一时间

控制器:

public function store(TransportationRequest $request1, PurchaseRequest $request2, SaleRequest $request3)
    {
        //do actions here
    }

我已经尝试过一个接一个地继承表单请求,但是无法成功。

编辑:

更具体地讲我的问题:

我有三个独立的形式purchasetransporataion以及sale其使用单独计价PurchaseRequestTransportationRequest并且SaleRequest对单个操作。

但是有一个特殊情况,在一个单一的形式处理一个purchasetransporataion和一个sale我想结合使用三个表单请求规则来验证表单,因为我不想再次编写相同的验证规则。

这个

注意:单独形式和组合形式中的字段相同。

谢谢..

山姆

Illuminate\Validation\ValidationException验证失败时,FormRequest会抛出一个异常,异常具有一个redirectTo方法,然后异常Handler从那里执行重定向

您可以通过在try / catch块中的控制器中手动运行Form Requests来实现所需的行为,该try / catch块捕获错误并在重定向之前合并错误包,或者如果必须通过Laravel将其注入到控制器中来运行它们,则您可以将需要添加您自己的异常处理程序,该异常处理程序将捕获所有错误,将它们组合在一起,然后在最终的Form Request运行后重定向。

但是,值得注意的是,这两种方法都不是很好:它们很麻烦,并且会给您带来比解决方案更多的问题。如果您想编写一个可维护的应用程序,则应尽量遵循Laravel的工作方式。

存在一个用于验证表单的表单请求,因此,每个表单都应该有一个表单请求,如果您希望根据不同的规则集来构成一个表单请求,则应在表单请求内完成,例如:

  1. 为您的表单定义表单请求 php artisan make:request StoreMultipleForm
  2. 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;
    }
    
  3. 在控制器中使用新的组合表单请求,例如:

    public function store(StoreMultipleForm $request)
    {
        // Do actions here.
    }
    

这种方法的优点是它是独立的,它遵循一个表单请求期望的一个表单,不需要更改要合并的表单请求,并且如果需要添加此表单唯一的其他规则,则可以可以这样做而无需创建另一个表单请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章