Динамическая проверка в Laravel

Итак, у меня есть таблица с динамическими полями communication_type_id и communication_value. Если пользователь выбирает communication_type_id = 4, то Communication_value должен быть номером телефона, который требуется, и числовым, если пользователь выбирает
Communication_type_id = 7, тогда Communication_value должно быть обязательно и электронная почта. Как мне это сделать? До сих пор я выполнял следующие действия, но, похоже, он не проверяет условие, так как я получаю сообщение «Communication_value должно быть действительным адресом электронной почты» для обоих условий:

  $validator = Validator::make($request->all(), [
'name' => 'required',
'client_addresses.*.address'=>'required',
'client_addresses.*.city'=>'required',
'client_addresses.*.state_province'=>'required',
'client_addresses.*.country'=>'required',
//Communication|
'client_communications.*.communication_type_id'=>'required|numeric',

//tag
'tags.*.tag_id'=>'required',

]);

foreach ($request->client_communications as $key=>$com) {
// dd($com);
if($com['communication_type_id']== "5")
{

$validator = Validator::make($request->all(), [
'client_communications.'.$key.'.communication_value' => 'required|numeric',
]);
}
if ($com['communication_type_id'] == "7"){
$validator = Validator::make($request->all(), [
'client_communications.'.$key.'.communication_value' => 'required|email',
]);
}}if ($validator->fails()) {

return response()->json(['errors'=>$validator->errors()]);
}

0

Решение

Вы можете проверить это, получив опубликованные данные по переменной $ request, например:

$validator = Validator::make($request->all(), [
'name' => 'required',

//address

'client_addresses.*.address'=>'required',
'client_addresses.*.city'=>'required',
'client_addresses.*.state_province'=>'required',
'client_addresses.*.country'=>'required',

'client_communications.*.communication_type_id'=>'required|numeric',

//client tag

'tags.*.tag_id'=>'required',

]);

if($request->communication_type_id == "4"){
$validator = Validator::make($request->all(), [
'client_communications.*.communication_value' => 'required|numeric|phone',
]);
}

if($request->communication_type_id == "7"){
$validator = Validator::make($request->all(), [
'client_communications.*.communication_value' => 'required|email',
]);
}

if ($validator->fails()) {
return response()->json(['errors'=>$validator->errors()]);
}

Если какое-то другое решение из проверки правильности Laravel ценится иначе, этот подход должен хорошо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector