Практика использования MVC

Модель

Про модель надо держать следующую мысль: "Могу ли я использовать эту модель в другом проекте?", ответ должен быть положительным.

Должна

  • Работать с данными, в том числе сохранять, искать и извлекать записи из СУБД
  • Содержать бизнес-логику и проверки корректности данных
  • Формировать и выполнять SQL запросы

Не должна

  • Обращаться к параметрам запросов пользователя (GET, POST), в том числе перенаправлять пользователя
  • Генерировать HTML или другой код, который отобразиться пользователю
  • Возвращать коды состояния HTTP (404, 302 и т.д.)

Представление

Должно

  • Генерировать HTML, лучше с использованием шаблонизатора
  • Использовать данные только контроллера и модели

Не должно

  • Взаимодействовать с СУБД.
  • Обрабатывать запросы пользователя

Контроллер

Типичной действие в контроллере: создание экземпляра модели (или получение данных через статический метод модели), заполнение модели данными из POST запроса, сохранение в СУБД, перенаправление пользователя на другую страницу.

Должен

  • Обрабатывать запросы пользователей, в том числе параметры из GET и POST
  • Оперировать данными через модели и отображением через представления
  • Осуществлять редиректы

Не должен

  • Организовывать бизнес-логику
  • Содержать SQL-запросы
  • Формировать HTML разметку

Похожие записи

Кратко о внедрение зависимостей и сервис контейнере

Cтатья о том, что такое "Внедрение зависимостей" и "Сервис-контейнер" отталкиваясь от их реализации в PHP фреймворках. Статья написана по мотивам статей Фабьена Потенсье, ведущиго разработчика и идеолога фреймворка Symfony, а также документации фреймворка Laravel.

Про сохранение полей даты в Eloquent

Если в моделе не указать

protected $dates = ['something_at'];

То надо делать формат

// Поле типа date 
'something_at' => Carbon::now()->addDays(7)->format('Y-m-d'),

// Поле типа date 
'something_at' => Carbon::now()->addDays(7)->format('Y-m-d H:i:s'),