Намагатися порівнювати технології, у кожної з яких є велика кількість шанувальників - справа невдячна. Завжди є шанс щось упустити, особливо, якщо для себе вже вибір зробив. Тому в цій статті ми спробуємо неупереджено розібратися, чим все-таки відрізняються 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 використовуються в великих проектах:
Ми використовували Symfony2 для багатьох своїх проектів - від сервісу для моніторингу якості доріг до сайту для фотографів - і можемо з упевненістю сказати, що нам подобається працювати з ним на великих проектах. До речі, раніше ми вже ділилися деякими хитрощами щодо поліпшення продуктивності проекту на Symfony2 c Doctrine2 ORM.
Можливості для розширення
- 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. Тести повинні знаходитися в піддиректорії бандла, який вони будуть тестувати. Якщо дотримуватися цього принципу, то всі тести проекту можна виконати за допомогою цієї команди:
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 і спробувати написати свій перший додаток.