Laravel 验证 - 如何添加 if 语句

Laravel validation - how add if statement

我是 Laravel 的初学者。我需要验证我的项目。我使用 Laravel 8。 我在 TaskRequest 中有这段代码:

public function rules()
    {
        return [
            'speed_number' => ['required', 'string', 'min:3', 'max:255'],
            'order_number' => ['required', 'string', 'min:3', 'max:255'],
            'address_from' => ['required', 'string', 'min:3', 'max:255'],
            'address_to' => ['required', 'string', 'min:3', 'max:255'],

            'carrier_name' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_nip' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_street' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_email' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_phone' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_postal_code' => ['required', 'string', 'min:3', 'max:255'],
            'carrier_city' => ['required', 'string', 'min:3', 'max:255'],
        ];
    }

我需要这样的东西:

public function rules()
        {
            return [
                'speed_number' => ['required', 'string', 'min:3', 'max:255'],
                'order_number' => ['required', 'string', 'min:3', 'max:255'],
                'address_from' => ['required', 'string', 'min:3', 'max:255'],
                'address_to' => ['required', 'string', 'min:3', 'max:255'],
    
if($company == true){


                'carrier_name' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_nip' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_street' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_email' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_phone' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_postal_code' => ['required', 'string', 'min:3', 'max:255'],
                'carrier_city' => ['required', 'string', 'min:3', 'max:255'],
}


            ];
        }

(我需要在请求验证代码中添加 if 语句)。我怎样才能做到?

请帮助我:)

从问题来看,不清楚 company 是否在请求中。

如果不是,您可以 return 基于 $company

的不同值
public function rules() {
 if ($company) {
  // return rules for when company exists
 } else {
  // return rules for when company does not exist
 }
}

如果公司在请求中,您应该查看 required_if 验证 Laravel 提供的内容。 Laravel Docs - Required if

您似乎在寻找 required_if 规则。请参阅文档:https://laravel.com/docs/9.x/validation#rule-required-if

public function rules()
{
    return [
        'speed_number' => ['required', 'string', 'min:3', 'max:255'],
        // ... and other rules ...
        'carrier_name' => ['required_if:company,1', 'string', 'min:3', 'max:255'],
        // ... and other rules ...
    ];
}

您需要使用 Rule::requiredIf

use Illuminate\Validation\Rule;

'carrier_name' => [
    Rule::requiredif(function () use ($company) {
        return $company == true ? true : false;
    }),
    'string', 'min:3', 'max:255'
],

一种更有效的方法是:

        $rules =  [
            'speed_number' => ['required', 'string', 'min:3', 'max:255'],
            'order_number' => ['required', 'string', 'min:3', 'max:255'],
            'address_from' => ['required', 'string', 'min:3', 'max:255'],
            'address_to' => ['required', 'string', 'min:3', 'max:255'],
            'data_start' => ['required', 'string', 'min:3', 'max:60'],
            'data_finish' => ['required', 'string', 'min:3', 'max:60'],
            'transport_type'  => 'required'
        ] + ($request->carrier)->map(function ($attr, $key){
            return [
                "carrier.$key" => [Rule::requiredIf($request->transport_type == 2),'min:3', 'max:255'],
            ];
        })->toArray();

        Validator::make($request->all(),  $rules)->validate();