Выбираем подходящий PHP-фреймворк для проекта

Привет, Хабр. Меня зовут Денис, я backend-разработчик в Пиробайте. Поговорим о самых распространенных PHP-фреймворках и о том, для каких проектов целесообразнее выбрать тот или иной вариант. 

Статистику распространения бэкенд-фреймворков на PHP я брал с портала JetBrains, она 2021–2022 года, но ситуация к концу 2023 практически не изменилась — вот статистика лучших PHP-фреймворков от Cloudways.

a7c7a602ac62613563145fa520d9f438.png

Самыми популярными были и остаются Laravel и Symfony. После них идет WordPress, но в статье его рассматривать не будем (потому что CMS).

Следующий за ним CodeIgniter пропущу намеренно. Я удивился, но разработчики в интернете до сих пор спорят о том, что лучше — Laravel или CodeIgniter. По сути, это full-stack MVC фреймворк, коих много. Он делает то же, что Laravel или Symfony, только отличается архитектурой и рассчитан на маленькие проекты. Он стар (существует с 2006 года) и тот же Laravel был создан как его альтератива.

Вместо этих 2-х ребят я предлагаю рассмотреть следующие — Laminas (Mezzio) и Slim. Эти фреймворки/микрофреймворки, на мой взгляд, более технологичны на фоне предыдущих и хорошо подходят для решения нетипичных задач.

Сразу оговорюсь, что статья носит субъективный характер (но это не мешает подискутировать в комментариях). Автор статьи, как и студия, имеет большой, исчерпывающий опыт разработки именно на Laravel, а знания об остальных фреймворках основаны на небольшом личном опыте, данных из общего доступа и мнениях многочисленных коллег.

Итак.

Laravel   

Фаворит PHP-сообщества. Золотая середина между сложностью и функциональностью. С 2011 года постоянно улучшается. У него достаточно низкий порог входа, из-за того он так популярен.

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

Использование Laravel облегчает кучу рутинных вещей — маршрутизацию, кеширование, авторизацию, аутентификацию. Упрощает такие задачи, как проверка электронных адресов пользователей, хеширование и сброс паролей.

Одна из особенностей Laravel — валидация форм в любом месте и в любой момент времени, так как он предоставляет отдельный класс валидатора. С этим парнем можно не беспокоиться о кодировании моделей, представлений и контроллеров по отдельности. А самое, наверное, крутое — это его многочисленное комьюнити. Он удобен для новых разработчиков и имеет большую поддержку на различных сайтах, таких как Stack Overflow. В общем, преимуществ у него хватает и распространен он не просто так.

528d2c2e3298bad7056046dc93851e0d.png

Для каких проектов используется Laravel 

В основном, для разработки B2B-решений. Для создания проектов с большой нагрузкой и сложной бизнес-логикой, для которых нецелесообразно использовать CMS вроде Битрикса. Идеален для разработки безопасного и надежного веб-проекта, при этом он всегда останется на пике технологий. Laravel хоть и не предлагает встроенных средств контроля безопасности, но они доступны с помощью расширений.

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

Laravel может работать и в связке в Flutter, если мы говорим о мобильных приложениях: у него есть готовый функционал для реализации аутентификации и работы с данными, функционал для отправки пуш-уведомлений и электронных писем.

Отдельно упомянем технологию Laravel Octane.

Laravel Octane

Не так давно появилась технология Laravel Octane, которая позиционируется как полноценная замена Lumen.  Octane, по заявлениям Тейлора, суперскоростной и работает на демоническом PHP. При этом поддерживается разработчиком Laravel из коробки.

У Laravel Octane свои сервера, не Apache или Nginx, а Swoole и RoadRunner. Они, во-первых, в разы быстрее. А во-вторых, позволяют постоянно держать в памяти PHP. Вот оригинальная статья, в которой говорится, от чего зависит скорость работы. 

Суть Laravel Octane в том, чтобы разработчики, не умеющие работать с асинхронным PHP, могли с ним работать. Без головной боли о том, как же все устроено под капотом.

b854cbc58620432fbece410982c45d31.png

Для каких проектов используется Laravel Octane 

Для прироста производительности уже существующих приложений, разработанных на Laravel. Технология позволяет запускать параллельные задачи, а также пользоваться таймерами, интервалами, особо быстрым кэшем и Swoole tables — структурами данных для общения между корутинами Swoole (если в качестве сервера был выбран именно Swoole, у Roadrunner такого нет):

01d62bcb82ea2101a150c3aa728ca230.png

Октан загружает приложение один раз, сохраняет его в памяти, а после отправляет ему запросы на сверхзвуковой скорости.

Symfony

У Symfony процветающее сообщество разработчиков, с количеством более 300к человек. Гибкий фреймворк, конфигурируемый под любую ситуацию, из-за чего используется в крупных проектах. У него богатая экосистема, сам он сложнее, чем Laravel, и порог входа у него выше. Есть решения для оперативного написания API и есть библиотеки, которые упрощают такие задачи, как создание форм, аутентификация маршрутизации, настройка объектов и создание шаблонов. В общем, Symfony — монстр с решениями на все случаи, но на его изучение может уйти пару жизней.

Ходит мнение, что каждый уважающий себя PHP-разработчик должен попробовать Symfony — он действительно интересно устроен, работа с ним прокачивает понимание многих вещей. Например, придется понять, как именно работает внедрение зависимостей, рефлексия классов, событийная архитектура (у Symfony, в отличие, например, от Laravel, обработка запроса реализуется не через Middleware, а через обработку событий для каждого этапа жизненного цикла).

e499b3accc81a1d59a0eea4e29672d36.png

Для каких проектов используется Symfony

Для проектов уровня энтерпрайз. В крупных компаниях-корпорациях. Для примера: на Symfony разработаны такие веб-ресурсы, как Spotify, и Yahoo! Также многие CMS под капотом используют компоненты Symfony. Это Drupal, Magento, eZ Publish и phpBB.

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

Yii

Yii — это объектно-ориентированный и MVC PHP-фреймворк. Одной из лучших его особенностей является генерация CRUD. 

Yii использует специальный инструмент генерации кода под названием Gii — веб-интерфейс, а также интерфейс командной строки для генерации часто используемых фрагментов кода. Что способствует быстрой разработке и повышению производительности приложений. 

Написание повторяющихся кодов полностью исключено, так как Yii следует правилу DRY — Don«t Repeat Yourself — и позволяет структурировать кодовую базу. Содержит множество Ajax-виджетов для проверки данных. Обеспечивает расширяемость платформы путем внесения незначительных изменений в код, а также совместимость с интерфейсами сторонних разработчиков, ускоряет время загрузки страниц, тем самым повышая производительность сайта.

39ef07f74ba369d4c249657dc54007f0.png

Для каких проектов используется Yii

Используется для разработки приложений любой сложности — от сайтов-визиток до крупных сервисов. Но в 2023 разрабатывать новые проекты на Yii, на мой взгляд, целесообразнее, если штат разработчиков хорошо разбирается в Yii, но не разбирается в других технологиях. Тенденция такова, что фреймворк теряет позиции, и новые проекты на нем пишутся редко.

Гораздо больше разработчиков на Laravel, их легче найти, коммьюнити намного активнее. Да и разнообразных пакетов навскидку для Laravel больше. Популярность Yii, наверное, можно объяснить тем, что существовал он до широкого распространения публичных Git-репозиториев и практики коллективной open-source разработки, и какое-то время у него не было серьезных конкурентов.

Slim

Это микрофреймворк, который помогает писать простые, но мощные веб-приложения и API. По сути, Slim — диспетчер, который получает HTTP-запрос, вызывает соответствующую процедуру обратного вызова и возвращает HTTP-ответ.

Большой плюс в том, что Slim очень быстрый и имеет мало кода.

Из-за того, что это микрофреймворк, можно использовать только нужные функции, не перегружая проект лишним кодом — Slim супер легковесный.

e540414d77252162632c9ecca207f8d8.png

Для каких проектов используется Slim

Для решения небольших задач, в ситуациях, когда Symfony и Laravel для них будут избыточными. Основное веб-приложение можно разработать на Laravel, а отдельные, слабо связанные и атомарные сервисы — на Slim. Фреймворк используется для небольших api, для микросервисов, для отдельных сервисов в рамках монолита.

Laminas (Mezzio)

По сути Mezzio — это ответвление от Zend Framework. Он собран из кусков Zend Framework, который сейчас называется Laminas, и поддерживает все модули Laminas. Получается, что непосредственно Mezzio не популярен, в то время как Laminas (Zend) довольно таки распространен.

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

У Laminas хорошая поддержка, он постоянно обрастает новыми функциями и обновляется.

Поддерживает запуск через Swoole. Отлично подходит для микросервисной архитектуры. Богат библиотеками, включающими компоненты для синхронизации с внешними сервисами — например, YouTube. Поддерживает большинство популярных СУБД, включая MySQL, Microsoft SQL Server, SQLite, PostgreSQL.

600403536e9da6337c1f9706a5a87298.png

Для каких проектов используется Laminas (Mezzio)?   

Однозначного ответа нет. Можно использовать для разных целей, но главным образом для API. Хорошо подойдет для микросервисов. По умолчанию доступен скелетон модульного приложения. Если его использовать и придерживаться модульной архитектуры, то на выходе получится код, который легко поддерживать и масштабировать.

То есть, если у бизнеса появится необходимость масштабироваться, то Mezzio позволит сделать это относительно недорого. В этом он похож на Symfony. Если надо будет разбить приложение на микросервисы, с Laravel это будет сделать сложнее, так как его архитектура немного о другом.

На что обратить внимание при выборе фреймворка?

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

С точки зрения разработчиков — однозначно ответить на этот вопрос нельзя. Все зависит от конкретной задачи. Если нужно реалтайм-взаимодействие (что PHP не поддерживает), ты будешь искать решение не в PHP. А, на Node.js, например. А если все-таки нужно оставаться в рамках PHP, можно найти асинхронные решения вроде RoadRunner или Swoole.

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

Если нужен бэк для чат-ботов Telegram — аналогично. Можно обойтись микрофреймворком. Главное, чтобы для него были удобные библиотеки для работы с API Telegram.

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

По сему у меня возникает вопрос — что используете для разработки B2B-проектов вы? И насколько хорошо это решает задачи? Напишите в комментах.

© Habrahabr.ru