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

Метод rules

Метод rules класса FormRequest используется для определения правил валидации входящих данных. Он должен возвращать массив, где ключами являются имена полей, а значениями - правила проверки. Правила могут быть представлены в виде строки с разделителем | или в виде массива. Этот метод вызывается автоматически перед передачей запроса в контроллер.

Синтаксис

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class PostRequest extends FormRequest { public function rules(): array { return [ 'field' => 'rule1|rule2|rule3', 'field2' => ['rule1', 'rule2'], ]; } } ?>

Пример

Давайте создадим запрос для валидации данных статьи. В методе rules укажем, что заголовок обязателен, а содержимое должно быть строкой и иметь минимальную длину:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ArticleRequest extends FormRequest { public function rules(): array { return [ 'title' => 'required|string|max:255', 'content' => 'required|string|min:50', 'is_published' => 'boolean', ]; } } ?>

Пример

Теперь используем созданный запрос в контроллере для сохранения статьи. Если валидация не пройдена, Laravel автоматически вернет ответ с ошибками:

<?php namespace App\Http\Controllers; use App\Http\Requests\ArticleRequest; use App\Models\Article; class ArticleController extends Controller { public function store(ArticleRequest $request) { $data = $request->validated(); $article = Article::create($data); return response()->json([ 'message' => 'Article created', 'article' => $article, ]); } } ?>

Пример

Метод rules может динамически определять правила на основе входных данных или состояния системы. Например, для поля 'slug' установим правило уникальности с игнорированием текущей записи, а поле 'category_id' сделаем обязательным только для новых статей:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; use App\Models\Article; class ArticleRequest extends FormRequest { public function rules(): array { $rules = [ 'title' => 'required|string|max:255', 'content' => 'required|string', 'slug' => [ 'required', 'string', Rule::unique('articles')->ignore($this->route('article')), ], ]; if ($this->isMethod('post')) { $rules['category_id'] = 'required|exists:categories,id'; } return $rules; } } ?>

Пример

В методе rules можно использовать вложенные правила для валидации массивов. Например, проверим, что у пользователя есть хотя бы один номер телефона и каждый номер имеет правильный формат:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserRequest extends FormRequest { public function rules(): array { return [ 'name' => 'required|string|max:100', 'email' => 'required|email|unique:users', 'phones' => 'required|array|min:1', 'phones.*' => 'string|regex:/^[0-9]{10}$/', 'profile.age' => 'integer|min:18', ]; } } ?>

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

  • метод authorize,
    который определяет права пользователя на выполнение запроса
  • метод messages,
    который переопределяет сообщения об ошибках
  • метод prepareForValidation,
    который подготавливает данные перед валидацией
  • метод validated,
    который возвращает массив проверенных данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить