Метод enum
Метод enum класса Rule предназначен для валидации данных на соответствие значениям перечисления (enum) PHP. Первым параметром передаётся имя класса перечисления, вторым - опциональный метод, который должен возвращать массив допустимых значений. Метод возвращает объект правила, который можно использовать в массиве правил валидации.
Синтаксис
<?php
use Illuminate\Validation\Rule;
Rule::enum($enumClass, $method = 'cases');
?>
Пример
Давайте создадим перечисление для статусов статей и проверим, что переданное значение соответствует одному из допустимых статусов:
<?php
namespace App\Enums;
enum ArticleStatus: string
{
case DRAFT = 'draft';
case PUBLISHED = 'published';
case ARCHIVED = 'archived';
}
?>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\ArticleStatus;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'status' => ['required', Rule::enum(ArticleStatus::class)],
]);
// Further logic...
}
}
?>
Результат выполнения кода при передаче допустимого значения:
["status" => "published"]
Пример
Рассмотрим пример с перечислением, которое использует метод для получения допустимых значений:
<?php
namespace App\Enums;
enum UserRole: string
{
case ADMIN = 'admin';
case EDITOR = 'editor';
case VIEWER = 'viewer';
public static function getValues(): array
{
return [
self::ADMIN->value,
self::EDITOR->value,
self::VIEWER->value,
];
}
}
?>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\UserRole;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$validated = $request->validate([
'role' => ['required', Rule::enum(UserRole::class, 'getValues')],
]);
// Update user...
}
}
?>
Результат выполнения кода при передаче допустимого значения:
["role" => "editor"]
Пример
Используем метод enum в составе более сложного массива правил вместе с другими валидационными правилами:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Enums\ArticleStatus;
class PostController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
'status' => ['required', Rule::enum(ArticleStatus::class)],
]);
// Create post...
$res = $validated;
return $res;
}
}
?>
Результат выполнения кода при успешной валидации:
["title" => "My Article", "content" => "Content text...", "status" => "published"]
Смотрите также
-
метод
in,
который проверяет вхождение значения в заданный массив -
метод
unique,
который проверяет уникальность значения в таблице базы данных -
метод
exists,
который проверяет существование значения в таблице базы данных -
класс
Rule,
который предоставляет набор вспомогательных методов для создания правил валидации