Правило enum
Правило enum применяется к полям формы для проверки
того, что значение существует в указанном перечислении
BackedEnum. Первым параметром передаётся класс
перечисления, вторым - метод для получения допустимых
значений. Если второй параметр не указан, используется
метод cases.
Синтаксис
<?php
use Illuminate\Validation\Rule;
$rules = [
'field' => Rule::enum(EnumClass::class, 'method'),
];
?>
Для использования правила enum необходимо
импортировать класс Rule из пространства
имён Illuminate\Validation.
Пример
Давайте создадим перечисление для статусов заказа и проверим, что переданное значение является допустимым:
<?php
namespace App\Enums;
enum OrderStatus: string
{
case PENDING = 'pending';
case PROCESSING = 'processing';
case COMPLETED = 'completed';
case CANCELLED = 'cancelled';
}
?>
<?php
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\OrderStatus;
$request = Request::create('/orders', 'POST', [
'status' => 'processing',
]);
$rules = [
'status' => ['required', Rule::enum(OrderStatus::class)],
];
$validator = validator($request->all(), $rules);
if ($validator->passes()) {
echo "Validation passed";
} else {
echo "Validation failed";
}
?>
Результат выполнения кода:
"Validation passed"
Пример
Проверим значение, которое не входит в перечисление:
<?php
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\OrderStatus;
$request = Request::create('/orders', 'POST', [
'status' => 'invalid_status',
]);
$rules = [
'status' => ['required', Rule::enum(OrderStatus::class)],
];
$validator = validator($request->all(), $rules);
if ($validator->fails()) {
$res = $validator->errors()->first('status');
echo $res;
}
?>
Результат выполнения кода:
"The selected status is invalid."
Пример
Использование правила enum внутри класса
FormRequest для валидации данных формы:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use App\Enums\OrderStatus;
class OrderRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'status' => ['required', Rule::enum(OrderStatus::class)],
'amount' => ['required', 'numeric', 'min:0'],
];
}
}
?>
Пример
Использование правила enum с пользовательским
методом для получения допустимых значений. Предположим,
что перечисление содержит метод values:
<?php
namespace App\Enums;
enum PaymentMethod: string
{
case CARD = 'card';
case PAYPAL = 'paypal';
case BANK_TRANSFER = 'bank_transfer';
public static function values(): array
{
return ['card', 'paypal'];
}
}
?>
<?php
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\PaymentMethod;
$request = Request::create('/payments', 'POST', [
'method' => 'bank_transfer',
]);
$rules = [
'method' => ['required', Rule::enum(PaymentMethod::class, 'values')],
];
$validator = validator($request->all(), $rules);
if ($validator->fails()) {
$res = $validator->errors()->first('method');
echo $res;
}
?>
Результат выполнения кода:
"The selected method is invalid."