Пытаться сравнивать технологии, у каждой из которых есть большое количество поклонников — дело неблагодарное. Всегда есть шанс что-то упустить, в особенности, если для себя уже выбор сделал. Поэтому в этой статье мы попытаемся непредвзято разобраться, чем все-таки отличаются Symfony2 и Yii2, оставляя окончательный выбор фреймворка нашим читателям.
Что выбрать: Symfony2 vs Yii2
Symfony2 и Yii2 являются PHP-фрейморками полного стека. Они оба имеют открытый исходный код, который лежит на Github. Документация по обеим фреймворкам доступна как на английском, так и на русском языках. При этом в Yii2 приложения организованы в соответствии с MVC, а в Symfony2 присутствует только модель и контроллер. В Yii2, также как и в Symfony2, используется пространство имен, благодаря чему компоненты, виджеты и модели изолированы друг от друга. При такой организации структуры проекта код писать гораздо проще, чем в первой версии Yii.
Что нужно сделать, чтобы начать работу с каждым из фреймворков?
Установка
Фреймворк Yii2 можно установить двумя способами: с помощью Composer или вручную. Разработчики рекомендуют выбирать первый способ, оно и понятно, ведь в будущем нам придется ставить расширения или обновлять фреймворк, что гораздо удобней делать, выполнив пару команд в Composer.
Эти же два способа доступны и для Symfony2. Разработчики рекомендуют использовать инсталлятор, чтобы ускорить процесс создания приложения. Но при желании можно использовать и Composer, как в случае с Yii2.
После установки Yii2 вы получите веб-приложение, сделанное на шаблоне basic, но есть также вариант установки без него либо с шаблоном advanced. Есть возможность создать и собственный шаблон. В Symfony2 также предусмотрено демо, но устанавливать его нужно отдельной командной.
Однако у Symfony2 есть интересная возможность устанавливать разные дистрибьюшины, заточенные под создание того или иного функционала, например:
- Standard Edition устанавливается по умолчанию.
- Hello World Edition следует использовать для создания бенчмарков.
- Symfony CMF Standard Edition подойдет для создания CMS.
- Symfony REST Edition имеет необходимый REST-функционал.
Процесс разработки
PHP-фреймворки созданы для того, чтобы снизить необходимость в повторяющихся задачах. Yii2 завоевывает большую популярность, чем Symfony2, когда речь заходит о процессе разработки, ведь он значительно сокращает само время разработки. В итоге вы тратите гораздо меньше времени на повторяющиеся задачи, и продуктивную часть времени проводите за кастомизацией своего веб-приложения.
В Yii2 присутствует модуль для генерации кода под названием Gii. Он является визуальным, запускается в браузере и позволяет удобно генерировать следующие элементы:
- классы Active Record;
- формы;
- контроллеры и представления для CRUD;
- новые классы контроллеров;
- «скелеты» для модулей и файлы для расширений Yii2.
Если же вам по душе командная строка, то милости просим в Symfony2. Здесь за генерацию «скелетов» для бандлов, форм и CRUD-контроллеров отвечает SensioGeneratorBundle.
Что касается роутинга, то у Symfony2 здесь больше возможностей, например гибкая настройка импортированных роутов, а также кастомизация роутов с помощью условий.
Нужно отметить, что Yii2 поставляется вместе с Bootstrap и предоставляет готовые виджеты и стили. Symfony2 же никак не облегчает труд frontend’щиков, и стили нужно подключать самому. Также в Symfony2 нет встроенных виджетов.
Производительность
Данные бенчмарка php-framework-benchmark (Symfony 2.7.7 и Yii 2.0.6):
- количество запросов в секунду для Symfony2 составило 101,99, для Yii2 — 379,77;
- пиковое использование памяти для Symfony2 составило 3,21, для Yii2 — 1.37.
Таким образом, Yii2 показывает лучшие результаты, чем Symfony2. Разработчики Yii2 деклалируют, что достижение высокой производительности всегда является главной целью фреймворка. Тем не менее, согласно данным сайта BuiltWith, как Yii2, так и Symfony2 используются в больших проектах:
- Сайт для поиска попутчиков BlaBlaCar использует Symfony2.
- Издание NY Daily News — Yii2.
- Видеосервис NatGeo Play от National Geographic — Symfony2.
- Сайт группы компаний Starwood Hotels and Resorts Worldwide — Yii2.
Мы использовали Symfony2 для многих своих проектов — от сервиса для мониторинга качества дорог до сайта для фотографов — и можем с уверенностью сказать, что нам нравится работать с ним на больших проектах. Кстати, ранее мы уже делились некоторыми хитростями по улучшению производительности проекта на Symfony2 c Doctrine2 ORM.
Возможности для расширения
Оба фреймворка имеют широкие возможности по расширению. Количество расширений для Yii2 (на данный момент 2017) сравнимо с количеством бандлов для Symfony2 (2736). В обоих фреймворках для установки расширений используется менеджер зависимостей Composer.
Самые популярные бандлы для Symfony2 это:
- FOSUserBundle — используется для управления пользователями (отправки данных о них в БД и получения сведений из нее).
- FOSRestBundle — предоставляет средства для построения REST-приложений.
- KnpMenuBundle — позволяет создавать объектно-ориентированные меню.
- StofDoctrineExtensionsBundle — используется для интеграции в проект расширений DoctrineExtensions.
- LiipImagineBundle — предоставляет возможности для манипуляции изображениями с помощью библиотеки Imagine.
Что используется в Yii2 для выполнения этих функций?
- Для управления пользователями — расширение yii2-user-management. Для REST — расширение yii2-rest.
- Для создания меню — виджет Menu (yii\widgets\Menu).
- Для работы с базами данных — ActiveRecord ORM.
- Для использования библиотеки Imagine — расширение yii2-imagine.
Как Yii2, так и Symfony2 позволяют использовать в проектах библиотеки сторонних производителей. Для этого нужно установить их с помощью Composer, выполнить настройку и прописать их в autoloader.
Тестирование
Symfony2 интегрирован с библиотекой PHPUnit. Тесты должны находиться в поддиректории бандла, который они будут тестировать. Если следовать этому принципу, то все тесты проекта можно выполнить с помощью этой команды:
$ phpunit -c app/
Yii2 интегрирован с Codeception, который понадобиться установить глобально и выполнить некоторые настройки. После этого тесты можно будет запускать из папки /var/www/yii2/basic/tests/. Чтобы выполнить приемочное тестирование в любом из фреймворков понадобиться использовать Codeception. Существует также вариант подключения Codeception к Symfony2. Для проведения приемочного тестирования можно попробовать использовать связку PHPUnit с Selenium.
Следует заметить, что для упрощения тестирования в Yii2 нужно пользоваться внедрением зависимостей. На практике это означает, что неспецифические объекты приложения следует выделять в доменный слой, а код, который отвечает за предоставление служб, — в компоненты приложения (которые являются чем-то вроде глобальных переменных). Однако нюанс состоит в том, что класс службы должен наследовать yii-класс и из-за этого службы из одного проекта нельзя использовать в другом. В Symfony2 такое требование отсутствует.
Какой фреймворк выбрать: Symfony2 или Yii2? Выводы и наблюдения
Ответа на вопрос «Что лучше: Symfony2 или Yii2»? не существует. Что же касается того, какой фреймворк выбрать: Symfony2 или Yii2, то, по нашим наблюдениям, вырисовывается следующая картина:
Yii2 любят за простоту и быстродействие, а также полноценное использование MVC-архитектуры. Часто отмечают легкость освоения API. К недостаткам Yii2 относят не слишком мощный роутинг и наличие большого количество виджетов, на настройку и изучение которых может уходить много времени.
Среди преимуществ Symfony2 — гибкая настройка роутинга, встроенное кэширование, а также использование шаблонизатора Twig (но существует способ использовать Twig и в Yii2). К недостаткам обычно причисляют наличие большого количества сущностей. Аннотационный синтаксис также не всем по душе.
Удобством установки, использованием пространства имен, легкостью тестирования и большим количеством расширений могут похвалиться оба рассматриваемых фреймворка. Но все-таки лучший способ понять, что подойдет лично вам, это установить Symfony2 и Yii2 и попробовать написать свое первое приложение.
Статья была обновлена 11.12.2015.