Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

MVC в PHP на практике

#веб_программирование #mvc #php


Недавно начал разбираться с mvc, сам принцип примерно понял: данные из модели передаются
контроллером в вид. Пишу простое приложение для тренировки и возникает куча вопросов,
на которые ответа в манах не найти, так как это по ходу частные случаи, поэтому попробую
задать их тут.


Контроллер и модель(и). Должен ли соблюдаться принцип - для одного контроллера одна
модель? Например, у меня есть модель page, которая из базы получает данные страницы
(title,scripts,id и т. д.). Как то я могу её использовать для подключения в нестатичных
страницах, там где нужна будет ещё одна модель? Если да, то каким образом это правильно
делать? Унаследовать новую модель из модели page? Или определить в контроллере одну
модель, получить данные, потом так же с другой? Либо есть ещё какой-либо способ, может
быть совсем без модели.


Я так понял, модели и контроллеры должны иметь базовый класс. Что должно быть реализовано
в этих классах? Например стоит ли в базовом классе модели реализовать подключение к базе?


Как лучше сделать подключение к базе? Стоит ли выделить под него отдельный и как
его применять?


Структура приложения. Везде в пример приводят такую структуру: в $_GET принимаются
2 параметра - один идентификатор контроллера, другой - его метод. Так, к примеру работает
YII. Я изменил это так: у каждого контроллера есть один базовый метод, в который передается
аргументом второй параметр, потом сам контроллер решает, что с ним делать. Стоит ли
менять так устоявшуюся структуру?


я понимаю, что в большинстве случаев можно ответить "как удобно, так и делай и не
задавай дурацких вопросов". но всё же мне кажется, лучше сначала узнать, как принято
это делать и уже потом на основе этого опыта будет понятно, как на самом деле удобно.    


Ответы

Ответ 1



Контроллер и модель(и). Должен ли соблюдаться принцип - для одного контроллера одна модель? Нет, тут пишется как вам угодно, напр. в контроллере Controller_Page можно вызвать модели Model_User, которая возьмет логин текущего пользователя из бд и Model_Article, которая возьмет статью, и все это потом выводится в Вид через этот контроллер. Понимание прийдет к вам с опытом. Я так понял, модели и контроллеры должны иметь базовый класс. Что должно быть реализовано в этих классах? Например стоит ли в базовом классе модели реализовать подключение к базе? В базовых классах лучше указывать какие стили подключаются, заголовки сайта и т.п. а работа с БД это уже как отдельный класс тоже можно реализовать и подключить в базовом. Структура приложения. Везде в пример приводят такую структуру: в $_GET принимаются 2 параметра - один идентификатор контроллера, другой - его метод. Так, к примеру работает YII. Я изменил это так: у каждого контроллера есть один базовый метод, в который передается аргументом второй параметр, потом сам контроллер решает, что с ним делать. Стоит ли менять так устоявшуюся структуру? Во фреймворках реализуется это через $this->request->param('id') или $this->request->post().

Ответ 2



Эти принципы для того, чтобы вам легче было работать. Это просто стиль работы с php. Ну например ты можешь создать один файл и в нем писать и подключение к базам, и внешний вид и контроллер. В классе можно написать функцию которые работают с базой, это еще безопасно, чем писать функции без класса, и можно функций писать статически, чтобы было еще безопасно. Думаю лучше создать отдельный config файл, который подключается с базой, и ее подключить к файлу где класс написать. И вообще мне кажется, что ты сам должен попробовать разные методы, и со временем поймешь, какой подход для тебя еще легче и понятнее. И при этом не забывай про безопасности и про быстроту приложений.

Комментариев нет:

Отправить комментарий