Почему в 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);
}
}
Таким образом все логика работы модели (в том числе валидация) инкапсулирована снутри класса, и другие классы не знают, как это происходит.
Такой подход облегчает сопровождение кода а так же облегчает написание тестов.
Конкретно в Laravel модель представляет из себя сущность, например какую-либо таблицу из БД, валидация же относится к бизнес-логике и вынесена соответственно в контроллер
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существует CMS DLEКогда вбиваете искомое слово в поисковую строку, то генерируется страница с результатами
Данный код отрабатывает на локалке, но на сервере он просто не выводит переменную c с которой провели операцию mysqli_fetch_row Символы которые выводятся...
Возникла такая проблема - нужно ajax запросом выводить при скролле до конца блока с новостями 3 новых актуальных новостиJS часть уже готова,...