Laravel在自定义验证规则上附加规则

时间:2017-07-21 10:43:15

标签: php laravel validation laravel-5

在请求中,我获得了定义验证规则和流的属性。假设它是account_type:business,personal。 每个值都会更改验证流程,并且要求不同的属性存在。

假设我有以下自定义规则方法:

public function validateAccountTypeBusiness($attribute, $value, $parameters, Validator $validator)
{
   // check is present:
   // Company address
   // VAT number
}

public function validateAccountTypePersonal($attribute, $value, $parameters, Validator $validator)
{
   // check is present:
   // User mobile phone
}

由于每个规则要求在此请求中显示多个单一属性,具体取决于帐户类型(增值税号,公司名称等),因此返回false将无法向用户提供信息,因为生成的响应通知该帐户类型为如果没有任何缺少实际属性的细节,则无效。

问题是:如何在此验证自定义规则中附加更多要验证的规则?

以下不工作:

public function validateAccountTypeBusiness($attribute, $value, $parameters, Validator $validator)
{
    $validator->addRules([
        'company_address'   =>  'required|string',
        'vat_number'        =>  'required',
    ]);
}

2 个答案:

答案 0 :(得分:1)

如果您关注Complex Conditional Validation,则可以使用以下方式进行验证

步骤1:使用静态规则创建Validator实例,这些规则在商家或个人帐户中都是相同的,如姓名,支票,电话,电子邮件等。

$v = Validator::make($data, [
    'email' => 'required|email',
    'name' => 'required|alpha',
    'phone' => 'required|numeric',
    'check' => 'required' //common in both account type
    //add more rules as required
]);

第2步:添加条件

的特定规则
$v->sometimes('VAT', 'required|max:50', function ($input) {
    return $input->account_type == 'buisness';
});

$v->sometimes('Company_address', 'required|max:500|alpha', function ($input) {
    return $input->account_type == 'buisness';
});

$v->sometimes('user_mobile', 'required|numeric', function ($input) {
    return $input->account_type == 'personal';
});

sometimes()方法的参数:

  

传递给有时方法的第一个参数是   我们有条件地验证字段。第二个论点是   我们想要添加的规则。如果Closure作为第三个参数传递   返回true,将添加规则。

答案 1 :(得分:0)

根据我的理解,自定义验证规则只能用于一个参数&你想把他们聚在一起。

这是解决问题的众多方法之一。希望它有所帮助。

<?php

namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AccountController extends Controller
{
    /**
     * Store a new user account.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        if($request->input('account_type' == 'business') {
          // Validation for business account
            $validator = Validator::make($request->all(), [
                'company_address' => 'required|string',
                'vat_number' => 'required',
            ]);
        }
        else {
         // Validation for personal account
            $validator = Validator::make($request->all(), [
                'contact_number' => 'required',
            ]);
        }

        if ($validator->fails()) {
            return redirect('account/create')
                        ->withErrors($validator)
                        ->withInput();
        }

        // Store the user account...
    }
}

参考 -

手动创建验证器 -   https://laravel.com/docs/5.4/validation#manually-creating-validators