В нашем небольшом материале сравним два популярных фреймворков Laravel и Symfony по разным критериям - структура, настройки, работа с базой данных и т.д. Также поговорим о том, в каких ситуациях при разработке сайта целесообразно использовать первый фреймворк, а в каких - второй.
Не секрет, что многие веб-приложения в настоящее время разрабатываются не с нуля, а на базе какого-либо фреймворка. Такой подход позволяет значительно сократить время работы (за счет того, что многие из типовых компонентов и модулей во фреймворке уже реализованы), повысить качество конечного продукта (за счет высокого качества кода и защищенности большинства фреймворков) и сократить издержки на дальнейшее сопровождение проекта (благодаря наличию подробной документации).
Одними из самых популярных и востребованных фреймворков по праву считаются Symfony и Laravel. Их используют в большом количестве новых проектов, начиная с самых маленьких одностраничных сайтов и заканчивая огромными корпоративными порталами, обладающими сложной внутренней структурой и функционалом. В данной статье мы попытаемся сравнить два этих фреймворка по совокупности разных показателей и выяснить, в каких именно случаях выгодно использовать Symfony, а в каких - Laravel.
1. Структура
Symfony состоит из множества различных модулей и компонентов, каждый из которых отвечает за какой-то отдельный аспект функциональности. К примеру, компонент для обработки HTTP-запросов, компонент для работы с консолью, для работы с CSS и JS, диспетчер событий и т.д.
Особенно явно эта модульность заметна, начиная с 4 версии фреймворка, где по умолчанию устанавливаются лишь самые базовые компоненты. Все остальное приходится ставить вручную позже (при помощи Composer). Что касается Laravel, то здесь по умолчанию установлены все необходимые для более-менее полноценного сайта пакеты и зависимости. Но если вам понадобится что-то еще, то это также можно установить посредством Composer.
2. Настройки конфигурации
Конфигурировать настройки приложения (в частности, название и тип СУБД, параметры подключения к ней и многое-многое другое) в Symfony можно посредством трех основных форматов - PHP, XML, YML.
Наиболее прогрессивным и минималистичным считается YML - именно он используется по умолчанию в новом проекте. Что касается Laravel, то здесь присутствует лишь один формат конфигурации - PHP. С одной стороны, это хорошо для начинающих программистов, так как не нужно разбираться в других форматах. С другой стороны, теряется гибкость конфигурирования. Да, и конечный результат может получиться достаточно громоздким и менее наглядным, чем в Symfony.
3. Обработка запросов HTTP
Перед попаданием на сервер все запросы от клиента проходят обработку, причем, в несколько стадий. У Symfony для этих целей используются так называемые события ядра или kernel events.
Здесь можно разместить разного рода проверки данных из запроса (структура, формат и т.д.), сделать проверку доступа (исходя из того, какой именно пользователь делает запрос), менять данные на лету и т.д. У Laravel, в свою очередь, есть middlewares - урони проверки запроса, работающие по чуть более простой схеме. В каждом из них можно описывать критерии соответствия, которые должен пройти запрос, чтобы попасть на сервер.
4. Работа с базой данных
В Symfony для упрощения работы с БД используется Doctrine ORM - реляционный проектор, позволяющий работать с данными в объектном стиле. Это позволяет значительно сократить объем кода, необходимого, к примеру, для совершения выборки из базы или вставки новой порции данных. Также Doctrine позволяет писать код, абстрагируясь от конкретного типа СУБД, используемой на проекте (MySQL, PostgreSQL и т.д.).
Кроме того, при использовании ORM разработчику совсем необязательно владеть синтаксисом базы данных, так как все низкоуровневые операции выполняются "под капотом". Что касается Laravel, то тут для работы с базой используется собственная библиотека под названием Eloquent. Это не полноценный ORM, работать с ней гораздо проще (особенно для новичков).
5. Работа с View Layer (шаблонизатор)
В том и другом фреймворке для рендера веб-страниц используются так называемые шаблонизаторы. В Symfony в этой роли выступает Twig, а в Laravel - Blade. Шаблонизатор позволяет гибко управлять данными при их отображении на странице сайта, форматировать их, выводить веб-формы, обращаться к внутренним сервисам или даже к БД, если этого требует логика.
По сути, Twig и Blade очень похожи, но первый отличается большей строгостью к обработке и фильтрации данных, которая выполняется в коде шаблона. К примеру, в Twig нельзя использовать "голый" PHP-код. Вместо этого можно задействовать фильтры.
6. Порог вхождения
Не совсем технический критерий, но упомянуть о нем стоит, так как он вытекает из всего озвученного ранее. Новичку в деле веб-разработки гораздо проще освоить Laravel, нежели "тяжелый" (в плане функционала / документации) Symfony. На Laravel процесс создания типового сайта выглядит более наглядно и доступно для человека, который совсем недавно изучил объектно-ориентированный PHP. Во-многом, из-за этого фреймворк пользуется такой большой популярностью среди небольших веб-студий и программистов-одиночек.
Выводы
Руководствуясь описанными выше критериями сравнения, попробуем подвести итоги и понять, в каких случаях при создании веб-приложения выгодно использовать Laravel, а в каких - Symfony.
Laravel, как правило, берется за основу относительно небольших и не слишком сложных проектов, к примеру, бекенда для мобильных приложений (заказ еды, такси, АПИ интернет-магазинов и т.д.), тематических авторских блогов (как альтернатива тому же WordPress), разного рода стартапов. В-общем, данный фреймворк хорошо себя чувствует там, где нужна реализация каких-то типовых решений и функционала.
Symfony, благодаря большей надежности, гибкости и расширяемости, часто используется при разработке сложных корпоративных проектов, где нужна многоуровневая логика и необычный / нестандартный функционал. К примеру, корпоративный ресурс какой-либо компании, куда имеют доступ ее сотрудники и пользователи услуг. Обычно на таких сайтах есть личный кабинет, чат с техподдержкой, возможность онлайн-оплаты и многое-многое другое.