РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
661 of 1392 menu

Класс Rule

Класс Rule в Laravel - это фасад, который предоставляет набор статических методов для создания правил валидации. Он особенно полезен, когда стандартные правила валидации не подходят из-за необходимости добавить дополнительные условия, например, проверку уникальности значения с игнорированием конкретной записи. Класс Rule позволяет создавать цепочки методов, делая код валидации более читаемым и гибким.

Основное преимущество класса в том, что он предоставляет объектно-ориентированный интерфейс для определения правил. Это особенно актуально при создании сложных правил, таких как unique и exists, где требуется указать таблицу, столбец и, возможно, игнорируемый идентификатор.

Синтаксис

<?php use Illuminate\Validation\Rule; Rule::unique('users', 'email')->ignore($id); ?>

Пример использования Rule::unique

Давайте создадим правило для проверки уникальности email-адреса при обновлении профиля пользователя. Нам необходимо убедиться, что email уникален, но не учитывать текущего пользователя.

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use App\Models\User; class UserController extends Controller { public function update(Request $request, $id) { $user = User::findOrFail($id); $request->validate([ 'email' => [ 'required', 'email', Rule::unique('users', 'email')->ignore($user->id), ], 'name' => 'required|string|max:255', ]); $user->update($request->all()); echo "User updated successfully"; } } ?>

Результат выполнения кода при успешном обновлении:

"User updated successfully"

Пример использования Rule::exists

Теперь давайте проверим, что переданный category_id существует в таблице categories. Для этого используем метод exists.

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class ArticleController extends Controller { public function store(Request $request) { $request->validate([ 'title' => 'required|string|max:200', 'category_id' => [ 'required', 'integer', Rule::exists('categories', 'id'), ], ]); // Saving article logic... echo "Article created"; } } ?>

Результат выполнения кода при успешном создании статьи:

"Article created"

Пример использования Rule::in

Метод in позволяет ограничить допустимые значения для поля. Давайте проверим, что значение поля status является одним из допустимых: draft, published или archived.

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class PostController extends Controller { public function store(Request $request) { $request->validate([ 'title' => 'required|string', 'status' => [ 'required', Rule::in(['draft', 'published', 'archived']), ], ]); // Saving post logic... echo "Post saved"; } } ?>

Результат выполнения кода при успешном сохранении:

"Post saved"

Пример использования Rule::when

Метод when позволяет добавлять правила валидации условно, в зависимости от значения другого поля. Например, если поле has_discount равно 1, то поле discount_value должно быть числом и не превышать 100.

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class ProductController extends Controller { public function update(Request $request) { $request->validate([ 'name' => 'required|string', 'has_discount' => 'boolean', 'discount_value' => Rule::when( $request->has_discount == 1, ['required', 'integer', 'max:100'], ['nullable'] ), ]); echo "Product updated"; } } ?>

Результат выполнения кода при успешном обновлении:

"Product updated"

Смотрите также

  • класс FormRequest,
    который предоставляет удобный способ для валидации запросов
  • метод validate,
    который выполняет валидацию данных
  • метод fails,
    который проверяет, провалилась ли валидация
  • класс Validator,
    который представляет объект валидатора
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить