Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

1.3. Собираем наш PHP фреймворк

08/12/2019, by Ivan

Есть много различных путей для конструирования фреймворка. Кто-то предпочитает очень сложные фреймворки, кто-то очень простые. В наших статьях мы собираемся быстро собрать простой в использование и простой в понимание фреймворк.

Наши статьи помогут Вам разработать свой фреймворк, отличающийся от того что нужен нам для создания интернет магазина, вы сможете легко добавить другие части к фреймворку для создания чего-то большего. Главная цель цикла статей научится делать свой собственный фреймворк для любых CMS.

Паттерны (Patterns)

 Для разработки фреймворка применяются различные шаблоны проектирования приложения Паттерны. Паттерн - это наиболее удачные решения и практики, решающие общие задачи связанные с разработкой программ. Среди паттернов мы будем использовать следующие:

  • Модель-Вид-Контроллер (MVC, Model-View-Controller)
  • Реестр (Registry)
  • Еденичный класс (Singleton)

Модель-Вид-Контроллер (MVC)

MVC - это основа нашего фреймворка, предоставляет нам решение для разделения пользовательского интерфейса и логики нашего приложения. Пользовательский интерфейс (View) взаимодействуют с моделями данных (Model), используя контроллеры (Controller), которые в свою очередь содержат необходимую бизнес логику для управления данными в моделях.

Например когда пользователь нажимает на Добавить в корзину в Виде (view), контроллер обрабатывает этот запрос и взаимодействует с моделью корзины и добавляет товар в корзину. Обычно данные из  модели корзины возвращает обратно контроллеру сколько товаров на данный момент в корзине и показывает новую корзину с новым количеством товаров.

MVC

Мы будем использовать свой фреймворк и сможем расширять возможности на основе MVC. Как описывалось ранее данные представлены в моделях, сами данные распалагаются в базе данных. Однако модели и таблицы в базе данных находятся в одинаковом формате (поля в моделях совпадают с полями в таблицах). Так что мы можем расширить нашу даиграму MVC. Мы также видем конечный результат, который обрабатывается в View отображается в браузере, так что добавим и его в диаграму.

MVC scheme

Реестр (Registry)

Реестр предоставляет возможность хранить коллекцию объектов нашего фреймворка. Необходимость в Реестр возникает из-за абстракции связанной с MVC паттерном. Каждый контроллер и модель (например товар, корзина, страница) нужен чтобы выполнять общих задач, включая:

  • Запросы к БД
  • Проверка авторизовался пользователь для получения нужной информации
  • Отправка данных на View (управления шаблонами)
  • Отправка емайлов, например при покупке товара на сайте
  • Взаимодействие с файловой системой, например загрузка фотографий для товаров.

Большинство систем и фреймворков выполняют эти функции в объектах и мы будем создавать такие объекты. Реестр позволяет хранить эти объекты вместе. Реестр может быть вызван из любого места в фреймворке и предоставляет для этого доступ к своим функциям. Вот примерная диаграма нашего Реестра.

MVC

Фреймворк взаимодействует с Реестром напрямую, когда нужно предоставляет доступ остальным объектам. Внутри Реестра объекты могут также взаимодействовать друг с другом, например менеджер шаблонов может быть связан с файловым менеджером, емайл отправитель связан с емайл шаблонами.

Единичный класс (Singleton)

В русском языке сложно найти обозначение singleton, поэтому у нас будет Единичный класс, но в основном в документации пишут синглетон или просто на английском singleton. Возможно писать лучше на английском (наверняка, но у нас будет единичный класс).

Единичный класс – один из самых простых шаблонов для понимания. Основное назначение – гарантировать существование только одно экземпляра класса. Причиной обычно является следующее: требуется только один объект исходного класса и Вам необходимо, что бы объект был доступен в любом месте приложения, т.е. глобальный доступ.

Единичный класс используется, когда у класса только одно предназначение. Например, настраивать соединение с базой данных, чтобы остальные объекты могли взаимодействовать с БД.

Общая структура

 Следующий шаг к разработке нашего фреймворка это планирование структуры. Мы должны создать структуру для:

  • Моделей
  • Видов (Чтобы мы могли интегрировать возможность переключать стили сайта в нашем фреймворке, так чтобы для одного стиля была отдельная папка)
  • Контроллеров (Чтобы мы могли хранить контроллер в отдельной папке, если мы захотим добавить функционал, нам нужно было только добавить новую папку с контроллером)
  • Контроллера админа (мы создаем не только фреймворк, но и CMS, поэтому нужно предусмотреть, чтобы информацию на сайт могли вносить модераторы и админы)
  • Реестра
  • Объектов реестра
  • Загружаемых файлов
  • Сторонних библиотек
  • Другого кода

Принимая во внимание структуру фреймворка папки нашего фреймворка должны быть такими  (мы будем использовать английские названия папок, потому что так принято в PHP):

  • Models
  • Views
    • View A
    • Templates
    • Images
    • JavaScript
  • Controllers
    • Controller A
      • ControllerA
      • ControllerAAdmin
  • Registry
    • Objects
    • Database objects
  • Assets
  • Uploads
    • To be expanded when we add products and images to our framework!
  • Libraries
  • Miscellaneous