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

Свой 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 — Набор шрифтов для выводя красивых иконок.

Заключение

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

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

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

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

Консультации

Последние вопросы
Меню

Archive

Качественный хостинг сайтов CMS Для сайта услуг хостинга