Свой PHP фреймворк для своих проектов и не только

Author Автор: Роман Чернышов    Опубликовано: 15 февраля 2019

Свой PHP фреймворкДоброго времени друзья! Каждый раз когда возникает вопрос о разработке очередного интернет проекта, будь то информационный портал или специализированный сервис, встает вопрос о том, какой PHP фреймворк или CMS выбрать за основу для его создания. Решение должно подбираться исходя из характеристик будущего проекта, удачно подобранное решение позволит в будущем существенно сэкономить на обслуживании и масштабировании проекта, и речь не только о деньгах, но и о затратах времени и сил, которые могут потребоваться для решения вновь поставленных задач. Почти десять лет назад, я занялся разработкой своего собственного PHP фреймворка, который писался для моего первого проекта, который делался, как говориться «с нуля», им был сайт-биржа прогнозов на спорт. Проект был огромен, и уже тогда я заложил в свой фреймворк возможность масштабироваться, без каких либо существенных на то ограничений. Уже первая версия фреймворка имела админпанель, набор полезных библиотек, структуру MVC, а также логичную структуру файлов и папок. Далее я расскажу обо всем подробнее.

Собственный PHP фреймворк

Когда я только задумался о написании своего фреймворка, я решил посоветоваться с опытными программистами, своими товарищами, которые работали не только с PHP, но и с JS, Java, C++. Разумеется в ответ я услышал море критики, скептицизма, призывов к здравомыслию, советов не изобретать свой велосипед и т.д. Мол проще взять готовое решение и на его основе реализовать проект. Разумеется в чем-то они были правы, но если учитывать то, что кроме создания одного единственного проекта, в мои планы входило также изучить как можно глубже PHP, погрузиться в архитектуру различных CMS, почерпнуть интересные идеи, а потом попробовать реализовать все это в своем, ином, видении и самое главное — положить надежную основу всех моих будущих проектов, то моя затея была, на мой взгляд, стоящей! И я приступил к его написанию.

Большой опыт

И самое главное, по прошествии стольких лет с момента создания первой версии, я ни разу не пожалел о проделанной работе, ведь на основе своего фреймворка я разработал не один проект, а десятки, более того фреймворк лег в основу моих коммерческих продуктов CMS Совместные покупки, CMS Автопортал, CMS Семейный портал, CMS Спорт прогнозы, CMS OsRealty Недвижимость, несколько SAAS проектов, в том числе стартап для SMM специалистов(о котором я расскажу позже). А сколько было создано на его основе отдельных небольших решений для бизнеса, различных скриптов, калькуляторов и инструментов, включая даже парсеры. Мои работы на основе моего PHP фреймворка разошлись десятками и сотнями копий, и за все время(почти десять лет), я получил лишь с десяток писем, где пользователи говорили о том, что не смогли понять его архитектуру, но после нескольких подсказок, как правило вопросов больше не оставалось. А вот писем с конструктивной критикой, благодарностями, пожеланиями и предложениями, было куда больше.

Несколько раз ко мне обращались люди из других стран: Украины, Грузии, Армении, Казахстана, Греции, Израиля, за доработками их сайтов, проектов, сервисов, в основу которых был положен разработанный мною PHP фреймворк. Самое интересное то, что в ряде случаев, моя разработка была подписана авторством другого человека(я такой подход не приветствую), очевидно тем кто занимался разработкой проекта для этих людей изначально, но потом куда-то слился. Несколько раз я видел проекты, где все русские текста, содержащиеся в коде моего фреймворка были переведены на другие языки(например грузинский). Учитывая то, что мой фреймворк никогда не был общедоступен и поставлялся только с какими-то моими разработками, и при этом был кем-то взят за основу в какой-то своей работе, было для меня неожиданным, но в тоже время интересным и приятным. Пользователи находили мои контакты в коде фреймворка, в библиотеках, в шаблонах админпанели и писали мне.

Первая версия была достаточно простой, но уже имела MVC, понятную структуру маршрутизации и ЧПУ, а также набор всех необходимых классов и библиотек. Со временем я улучшал фреймворк, писал свои классы, пополнял набор полезных функций, изменял библиотеки, так появлялись его новые версии. И я до сих продолжаю поддерживать его и развивать.

Функционал

Мой PHP фреймворк достаточно прост, в нем нет ООП парадигмы, но реализована MVC (Модель, Представление, Контроллер). Контроллер это ядро, отвечает за подключение нужных классов и библиотек, подключение к БД, обработку запроса, роутинг и подключение модели с последующим подключением и выводом представления, в зависимости от выбранного раздела, страницы сайта. Единая точка входа index.php. Роутинг адресов страниц можно настроить через .htaccess, конфигурирование nginx или задать в самом скрипте PHP, в зависимости от предпочтений, возможностей и потребностях в производительности. Предусмотрено кеширование запросов к БД, простая защита от ДДОС, возможность дебага с удобным выводом отладочной информации.

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

Представление содержит HTML шаблоны, в которые передаются результаты работы модели и контроллера. В качестве шаблонизатора используются шотр-теги PHP(с целью лучшей производительности), но без проблем можно подключить любой другой шаблонизатор Smary, Twig, Blade и т.д. В зависимости от потребностей, я использую такие CSS фреймворки как Bootstrap или Semantic UI.

Структура каталогов интуитивно понятна, админпанель вынесена в отдельную папку и доступна по адресу ./partner. Остальные папки ./lib — набор библиотек и классов, ./theme — папка содержащая тему(модели и представление), а также CSS, ./upload — загружаемые данные, изображения и прочее, ./cache — папка содержащая кеш запросов к БД и прочих операций.

Так как фреймворк включает в себя готовую админпанель(Backend), его можно также назвать CMS(Content Management System) — Система управления контентом сайта. Взяв его за основу, достаточно реализовать только бизнес логику и Frontend сайта.

Админпанель и функционал

Формы — входа, авторизации восстановления пароля.
Настройки — в которые можно вынести любые настройки сайта, проекта.
Пользователи — Список пользователей, карточка пользователя, добавление, редактирование, удаление.
Страницы(новости, статьи, информационные страницы) — Список страниц, карточка пользователя, добавление, редактирование, удаление.
Категории страниц — Поддержка подкатегорий, ЧПУ.
Меню на сайте — Создание и редактирование меню. Вставка меню по шорт тегу в код шаблона сайта.
Раздел SEO — Настройка мета тегов для страниц и разделов сайта.
Резервное копирование базы данных — Создание и сохранения на диск копий БД, с возможностью скачивания.
Комментарии — Управление комментариями, модерирование.
Опросы — Создание и проведение опросов на сайте.
Рассылки — Осуществление массовой рассылки на емаил пользователям сайта.
Реклама — Размещение и управления блоками рекламы на сайте.

Пример админпанели

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

Описание набора классов

Access — Класс обеспечивающий авторизацию и регистрацию на сайте, а также позволяющий работать с данными пользователя.
Antiddos — Класс обеспечивающий защиту от DDOS атак на уровне скрипта. Разумеется серьезной защитой он не является, но позволяет отсечь нежелательный трафик и небольшие атаки, на практике несколько раз был полезен.
Cache — Работа с кешем. Можно поместить в кеш любые данные, объекты и массивы.
DBSql — Работа с базой данных MySQL. В последней версии класса реализовал работу с PDO, переход на PHP 7.
Dbug — Вывод содержимое переменных в удобном, читаемом формате, удобный инструмент для отлаживания скриптов.
GetImage — Загрузка изображений средствами CURL с удаленного сервера, с проверкой MIME Type и сохранением на диск.
ResizeImage — Изменение размеров изображений, наложение водяного знака.
IDNA Convert — Работа с кириллическими доменами, преобразование в PunyCode и т.д.
Mail — Отправка почтовых сообщений по средствам PHP Mail или SMTP.
PCLZIP — Работа с ZIP архивами. Архивация, распаковка, навигация внутри архива.
RSS — Генерация RSS ленты.
SEOName — Генерация ЧПУ URL из кириллической строки текста.
Timer — Подсчет времени выполнения скрипты с учетом времени затраченного на выполнение запросов к БД, удобно для отладки.
Библиотека функций — Большая библиотека полезных функций.

Описание набора библиотек

TinyMCE — WISIWIG редактор, не самая новая версия но бесплатная.
Semantic UI — CSS фреймворк для создания переносимых интерфейсов.
jQuery — Библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML.
jQuery UI — Библиотека на основе jQuery, реализующая более 20 плагинов.
Fontawesome — Набор шрифтов для выводя красивых иконок.

Заключение

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

Мой фреймворк имеет открытый исходный код и любой разработчик может продолжить работу с ним, независимо от меня. Что касается документации, то она не богата, но в тоже время и фреймфорк не столь сложен чтобы в нем не разобраться, к тому же он снабжен комментариями по коду. Но, а если сложности возникнут, я всегда рад дать подсказку!

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

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

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка