Правило required_if
Правило required_if применяется к полю формы и делает его обязательным, если другое поле имеет определённое значение. Первым параметром передаётся имя поля-условия, вторым - значение, при котором текущее поле становится обязательным. Можно указать несколько значений через запятую.
Синтаксис
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'field' => 'required_if:another_field,value'
]);
?>
Пример
Давайте сделаем поле 'phone' обязательным, если поле 'contact_method' равно 'phone':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'contact_method' => 'required|string|in:email,phone',
'phone' => 'required_if:contact_method,phone|string|min:10',
'email' => 'required_if:contact_method,email|email'
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
return response()->json([
'message' => 'User created successfully'
], 201);
}
}
?>
Результат выполнения кода при отправке формы с 'contact_method' = 'phone' и пустым 'phone':
{
"errors": {
"phone": ["The phone field is required when contact method is phone."]
}
}
Пример
Давайте сделаем поле 'delivery_address' обязательным, если поле 'delivery_type' равно 'courier' или 'post':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class OrderController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'delivery_type' => 'required|in:self,courier,post',
'delivery_address' => 'required_if:delivery_type,courier,post|string|max:255'
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
return response()->json([
'message' => 'Order created successfully'
], 201);
}
}
?>
Результат выполнения кода при отправке формы с 'delivery_type' = 'courier' и пустым 'delivery_address':
{
"errors": {
"delivery_address": ["The delivery address field is required when delivery type is courier or post."]
}
}
Пример
Давайте создадим валидацию для формы регистрации, где поле 'company' обязательно, если поле 'user_type' равно 'business':
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Models\User;
class RegisterController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|string|min:8|confirmed',
'user_type' => 'required|in:individual,business',
'company' => 'required_if:user_type,business|string|max:255'
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
'user_type' => $request->user_type,
'company' => $request->company
]);
return response()->json([
'message' => 'User registered successfully',
'user' => $user
], 201);
}
}
?>
Результат выполнения кода при отправке формы с 'user_type' = 'business' и пустым 'company':
{
"errors": {
"company": ["The company field is required when user type is business."]
}
}
Пример
Давайте используем правило required_if вместе с правилом prohibited для создания взаимоисключающих полей:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PaymentController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'payment_method' => 'required|in:card,cash,bank',
'card_number' => 'required_if:payment_method,card|prohibited_if:payment_method,cash,bank|string|size:16',
'bank_account' => 'required_if:payment_method,bank|prohibited_if:payment_method,card,cash|string|size:20'
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
return response()->json([
'message' => 'Payment processed successfully'
], 200);
}
}
?>
Результат выполнения кода при отправке формы с 'payment_method' = 'card' и пустым 'card_number':
{
"errors": {
"card_number": ["The card number field is required when payment method is card."]
}
}
Смотрите также
-
правило
required,
которое делает поле всегда обязательным -
правило
required_unless,
которое делает поле обязательным, если другое поле не равно указанному значению -
правило
required_with,
которое делает поле обязательным, если присутствует любое из указанных полей -
правило
prohibited,
которое запрещает присутствие поля в запросе