#laravel #laravel5
Почему в Laravel из коробки валидация подразумевается в контроллере, а не в модели? В документации сказано, что Базовый контроллер App\Http\Controllers\Controller включает в себя трейт ValidatesRequests, который уже содержит методы для валидации. Вопрос почему не базовый класс модели сразу содержит методы валидации? Ведь столько сказано о тонких контроллерах толстых моделях. Вот например ответ пользователя @HaruAtari с Тостера: Я считаю, что "толстая модель, тонкий контроллер" - это самый подходящий вариант. Вся логика приложения должна содержаться в моделях. Модель - это не просто сущности из бд, это еще и инкапсулированая логика ее обработки. А контроллер должен говорить модели, что делать и рендерить вьюхи. Например этот кусок кода неправильный: class MyController { public function myAction() { $user = new User(); $user->load($_POST); if ($user->valiadate()) { $user->saveToDatabase(); } else { throw new Exception("..."); } } } Неправильный потому что контроллер знает, как модель сохраняет данные. Что сначала идет валидация, а потом сохранение в бд. И если вы потом решите не проводить валидацию, или добавить еще один проверяющий метод (например), то вам придется делать это везде. Правильно быдет так: в модели определеить метод, содержащий логику: class User { public static function create(array $data) { $record= new static; $record->load($data); if($record->validate()){ $record->saveToDatabase(); } else { throw new Exception("..."); } return $record; } } А в контроллере просто дергать его и передавать туда данные: class MyController { public function myAction() { $user = User::create($_POST); } } Таким образом все логика работы модели (в том числе валидация) инкапсулирована снутри класса, и другие классы не знают, как это происходит. Такой подход облегчает сопровождение кода а так же облегчает написание тестов.
Ответы
Ответ 1
Конкретно в Laravel модель представляет из себя сущность, например какую-либо таблицу из БД, валидация же относится к бизнес-логике и вынесена соответственно в контроллерОтвет 2
Не знаю на счет того времени, когда задавался вопрос, но на таекщий момент валидацию правильнее всего выносить в Request классы. Это позволяет не дублировать код и не хранить логику валидации ни в контроллерах ни в моделях. https://laravel.com/docs/5.8/validation#form-request-validation
Комментариев нет:
Отправить комментарий