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

Php Laravel在自定义验证规则上附加规则,php,laravel,validation,laravel-5,Php,Laravel,Validation,Laravel 5,在请求中,我得到了定义验证规则和流的属性。假设它是账户类型:商业、个人。 每个值都会更改验证流,并要求在ir请求中显示不同的属性 假设我有以下自定义规则和方法: public function validateAccountTypeBusiness($attribute, $value, $parameters, Validator $validator) { // check is present: // Company address // VAT number } pu

在请求中,我得到了定义验证规则和流的属性。假设它是账户类型:商业、个人。 每个值都会更改验证流,并要求在ir请求中显示不同的属性

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

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',
    ]);
}

根据我的理解,自定义验证规则只能用于一个参数&您试图将它们组合在一起

这是解决问题的许多方法之一。希望能有帮助

<?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...
    }
}

根据我的理解,自定义验证规则只能用于一个参数&您试图将它们组合在一起

这是解决问题的许多方法之一。希望能有帮助

<?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...
    }
}
如果遵循,可以使用以下方法进行验证

步骤1:使用静态规则创建验证器实例,这两种情况下(业务或个人帐户)的规则相同,如姓名、支票、电话、电子邮件等

$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 == 'business';
});

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

$v->sometimes('user_mobile', 'required|numeric', function ($input) {
    return $input->account_type == 'personal';
});
有时()
方法的参数:

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

如果遵循,可以使用以下方法进行验证

步骤1:使用静态规则创建验证器实例,这两种情况下(业务或个人帐户)的规则相同,如姓名、支票、电话、电子邮件等

$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 == 'business';
});

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

$v->sometimes('user_mobile', 'required|numeric', function ($input) {
    return $input->account_type == 'personal';
});
有时()
方法的参数:

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


可以考虑使用条件添加规则吗?