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

    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, консолью и т.д.), тесты, документация и куча всяких, часто никогда не используемых, штук
    Ответ написан
    Комментировать