Skip to content

Mike0712/miniframework-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сделал небольшой минифреймворк на коленке с использованием современных паттернов MVC.

  1. Общие сведения не стал выдумывать никакого названия для вендора, просто Application. Реализовано пространство имён, файл автозагрузки находится в корне приложения. Автозагрузка и пространство имен соответствуют стандарту PSR-4, т.е. пространство имён соответствует вложенности классов проекта. Автозагрузка бесконечно расширяемая. Также к автозагрузке подключен файл автозагрзуки composer, располагающийся в папке vendor. Сама папка в репозиториии отсутствует, т.к. файлы composer.json и composer.lock содержат все необходимые данные для загрузки всех зависимостей проекта. В данном приложении намеренно не используются java скрипты и прочие, не связанные с PHP вещи, верстка на bootstrap без излишеств. Цель данного действия - ещё раз подчеркнуть, что я ищу работу на позицию PHP-программиста, а не верстальщика. Соединение с базой данных реализовано в классе App\Db который является синглтоном. Т.е. от этого класса может быть создан только один объект (одно соединение). Сам фреймворк заточен под сервер Apache2, для Nginx необходимо сделать пару настроек. Кроме того, данный фреймворк расчитан только для использование на PHP не ниже 7-й версии.

  2. Модели. В моделях реализован паттерн ORM, т.е. каждый класс модели - это проекция таблицы базы данных, каждое свойство - столбец в таблице. Соответственно - объект это строка в таблице базы данных. Т.е. например если мы запрашиваем из базы данных все записи, то получаем многомерный массив, в каждом из элементов которого лежит объект, соответствующий записи в таблице. В данном проекте присутствуют только 2 модели (для примера), т.е. 2 таблицы, т.е. некий новостной сайт, где одна таблица это новости, вторая таблица авторы новостей. Таблицы между собой связаны и это видно из файлов модели. Однако фреймворк никак не ограничивает в создании сколь угодно количества моделей и связей в соответствии с архитектурой конкретной базы данных. Таким образом, данный фреймворки основывается на концепции построения приложения от базы данных.

Также реализован паттерн ActiveRecords или CRUD(Create Read Update Delete) т.е. каждая запись может "сама себя" создать, прочитать изменить и удалить. За это отвечает базовая модель (класс App/Model), которая содержит соответствующие методы. Эти методы при вызове автоматически формируют запрос к базе данных, подставляя, когда это необходимо, данные, которые прислал контроллер (например id записи которую требуется изменить или удалить).

  1. Представление. За представление отвечает класс App\View. Данный класс содержит одно единственное свойство $data, в которое кладутся как в массив любые данные из контроллера, благодая "магическим методам" __set, __isset, __get. Т.е. контроллер передаёт значения для "псевдосвойств" во View, при этом имя псевдоствоства передаётся в виде переменной в шаблон. Сами шаблоны благодаря подключенному к проекту шаблонизатору Twig дополнительно реализуют собственную логику. Так например, новости на главной отображаются не в полном а урезанном (до 200 символов виде). Также реализована пагинация на главной странице и в админке.

  2. Контроллер. Точкой входа является файл index.php в корне проекта. Других входных точек нет. Логика контроллера реализована в классе роутера App/SefRouter, который обрабатывает запрос пользователя и для вызова соответствующего контроллера и его метода. Каждый контроллер - это отдельный файл - в проекте их 3 - (пространство имён App/Controllers) News - фронт контроллер, Admin

  • административная панель и Index - тестовый контроллер, используемый для отладки. Для добавления новой страницы в соответствующем контроллере необходимо создать метод, с именем обязательно начинающимся на action, например acrionIndex. Второе слово (обязательно с большой буквы) и есть название страницы. Данный метод должен вызвать метод соответствующей модели (согласно запросу) и передать данные в представление, указав при этом нужный шаблон, куда должны прийти эти модели. Кроме того в конролере реализован механизм вызова страницы 403 - доступ закрыт - пока появляется при отсутствии нужного адреса, страницы 404 - при отсутствии в базе данных конкретной запрашиваемой новости по её id, и вызов сервисной страницы при возникновении проблем соединением с базой данных, неверным запросом к базе и прочих технических нюансов. Данные страницы вызываются в исключительных случаях (кроме страницы 403), т.е. реализован механизм исключений (throw catch).

p.s. Данный пример не является "боевым" проектом, его цель всего лишь показать понимание концепции MVC. Современный сайт это далеко не только MVC есть много другой логики, никак не связанной ни с Model ни с View ни с Controller, однако MVC это имено то, что отличает хороший проект от плохого! Кроме того, данный фреймворк уже можно брать для создания какого-то несложного сайта и он будет работать великолепно.

Благодарю за внимание!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published