Как реализовать в MVC?

Доброго вечера.
Хочу понять смысл использования MVC от а до я в PHP. Немного посмотрев уроки, возникло несколько вопросов:
  1. Обычно модели, контроллеры и вьюшки наследуются от своего общего класса (Model, Controller, View). За что обычно отвечают классы предки в MVC.
  2. Относительно первого вопроса, по поводу модели. Например у нас есть класс соединения с БД (это делается в классе Model ?) Как обычно передают объект соединения c БД в модели ? В каждом методе используется что-то вроде parent::__construct ?
  3. Есть допустим модуль с фотоконкурсами. В процедурном стиле выходит множество запросов и тупо вставляется на одной странице (например кол-во конкурсов, кол-во участников, кол-во парней, кол-во девушек, кол-во новых фотоконкурсов и т.д.). А как примерно реализуется это в MVC ? Точно так же ? Просто эти запросы мы подготавливаем в самой модели ? И передаем во вьюшку ?
  4. И самый главный вопрос, вот например скачивая фреймворки типа laravel'a, yii эти фреймворки весят по 15-30мб. Что там выходит на 15-30 мб я не могу понять ? Что обычно входит во фреймворки, чтобы достичь такого размера ?
  • Вопрос задан
  • 374 просмотра
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
1) За что обычно отвечают классы предки в MVC?
За хранение базовых функций, как пример, давай рассмотрим Controller
Предположим, что ядро фреймворка, вызывает всегда три метода, в такой последовательности:
beforeAction - запустить что-то до выполнения экшена
action - запустить сам экшен
afterAction - запустить что-то после выполнения экшена

** экшн = метод класса контроллера

так вот чтобы, ты мог не объявлять beforeAction и afterAction, они объявляются в каком-нибудь абстрактном классе Controller, от которого и идет дальнейшее наследование и все потомки получают эти методы

Либо на примере модели, есть какой-нибудь класс ActiveRecord, ты наследуешь свою модель от него и все потомки получают разом всю его функциональность: например конструктор запросов через вызов цепочек:
Posts::find()->where(['title'=>'hello world'])->orderBy(['id'=>SORT_DESC])->all();
ну, а твоя модель выглядит так class Posts extends ActiveRecord{}
т.е. вся логика скрывается в родителе

2) По разному, тут надо смотреть конкретный фреймворк: бывает что сервис контейнер этим занимается, бывает DI, бывает просто вызывается фабрика, а внутри ей передается соединение которое хранится где-нибудь в "реестре" ядра... в общем по-разному.

3) Опять же по-разному, но в целом принцип такой. Для каждой сущности есть своя модель, например есть отдельно модель Конкурсы, есть отдельно модель Участники и т.д. Тебе надо показать отдельно кол-во парней и девушек, тогда в контроллере отвечающим за вывод конкурса, ты обращаешься к модели Участников и получаешь необходимую информацию (что-то типа $boys = Paticipant->maleCount(); $girls = Paticipant->femaleCount(); ) и передаешь эти данные во view. А сам подсчет, работа с бд и т.д. идет уже в модели (Paticipant). В итоге получается что вся твоя логика делится на такие шаги:
- ядро анализирует запрос и вызывает экшн контроллера
- экшн контроллера, получает необходимые данные из модели и передает во вью
- модель содержит всякую логику получения и обработки данных
- контроллер или экшн контроллера рендерит вью и отдает код клиенту

4) Ну, обычно на сайте фреймворка пишут что туда входит. Всякие плюшки для разработчиков (например хелперы по созданию форм, классы по работе с SSH, консолью и т.д.), тесты, документация и куча всяких, часто никогда не используемых, штук
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы