Symfony2 Vs Yii2: какой фреймворк выбрать в 2015-м году?

Пытаться сравнивать технологии, у каждой из которых есть большое количество поклонников — дело неблагодарное. Всегда есть шанс что-то упустить, в особенности, если для себя уже выбор сделал. Поэтому в этой статье мы попытаемся непредвзято разобраться, чем все-таки отличаются 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 есть интересная возможность устанавливать разные дистрибьюшины, заточенные под создание того или иного функционала, например:

  1. Standard Edition устанавливается по умолчанию.
  2. Hello World Edition следует использовать для создания бенчмарков.
  3. Symfony CMF Standard Edition подойдет для создания CMS.
  4. Symfony REST Edition имеет необходимый REST-функционал.

Symfony2 Vs Yii2: какой фреймворк выбрать в 2016-м году?

Процесс разработки

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 используются в больших проектах:

  1. Сайт для поиска попутчиков BlaBlaCar использует Symfony2.
  2. Издание NY Daily News — Yii2.
  3. Видеосервис NatGeo Play от National Geographic — Symfony2.
  4. Сайт группы компаний Starwood Hotels and Resorts Worldwide — Yii2.

Мы использовали Symfony2 для многих своих проектов — от сервиса для мониторинга качества дорог до сайта для фотографов — и можем с уверенностью сказать, что нам нравится работать с ним на больших проектах. Кстати, ранее мы уже делились некоторыми хитростями по улучшению производительности проекта на Symfony2 c Doctrine2 ORM.

Symfony2 Vs Yii2: какой фреймворк выбрать в 2016-м году?

Возможности для расширения

Оба фреймворка имеют широкие возможности по расширению. Количество расширений для Yii2 (на данный момент 2017) сравнимо с количеством бандлов для Symfony2 (2736). В обоих фреймворках для установки расширений используется менеджер зависимостей Composer.

Самые популярные бандлы для Symfony2 это:

  1. FOSUserBundle — используется для управления пользователями (отправки данных о них в БД и получения сведений из нее).
  2. FOSRestBundle — предоставляет средства для построения REST-приложений.
  3. KnpMenuBundle — позволяет создавать объектно-ориентированные меню.
  4. StofDoctrineExtensionsBundle — используется для интеграции в проект расширений DoctrineExtensions.
  5. LiipImagineBundle — предоставляет возможности для манипуляции изображениями с помощью библиотеки Imagine.

Что используется в Yii2 для выполнения этих функций?

  1. Для управления пользователями — расширение yii2-user-management. Для REST — расширение yii2-rest.
  2. Для создания меню — виджет Menu (yii\widgets\Menu).
  3. Для работы с базами данных — ActiveRecord ORM.
  4. Для использования библиотеки 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 Vs Yii2: какой фреймворк выбрать в 2016-м году?

Какой фреймворк выбрать: Symfony2 или Yii2? Выводы и наблюдения

Ответа на вопрос «Что лучше: Symfony2 или Yii2»? не существует. Что же касается того, какой фреймворк выбрать: Symfony2 или Yii2, то, по нашим наблюдениям, вырисовывается следующая картина:

Yii2 любят за простоту и быстродействие, а также полноценное использование MVC-архитектуры. Часто отмечают легкость освоения API. К недостаткам Yii2 относят не слишком мощный роутинг и наличие большого количество виджетов, на настройку и изучение которых может уходить много времени.

Среди преимуществ Symfony2 — гибкая настройка роутинга, встроенное кэширование, а также использование шаблонизатора Twig (но существует способ использовать Twig и в Yii2). К недостаткам обычно причисляют наличие большого количества сущностей. Аннотационный синтаксис также не всем по душе.

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

Статья была обновлена 11.12.2015.