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();
我是 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();