Доброго времени суток, дорогой читатель.
За свою профессиональную карьеру я успел поработать с множеством инструментов — как на PHP-стеке, так и вне его: базы данных, различные очереди, поисковые движки и не только. Последние пару лет я — один из мейнтейнеров фреймворка Yii3. За это время было вложено много сил в перестройку фреймворка из монолитного в полностью компонентный. Время от времени заглядываю и в другие проекты с открытым исходным кодом, но в основном помогаю команде развивать Yii3.
Хочу запустить серию статей, а в дальнейшем и видеообзоров возможностей готовых библиотек от Yiisoft.
О фреймворке
Yii3 – пакетный фреймворк. А это значит, что вы можете использовать библиотеки из фреймворка в отвязке от экосистемы Yii. Например, такие пакеты можно подключить к Yii 2, Symfony, Laravel, к проекту без фреймворка или в любой другой PHP-проект.
Для просмотра существующих пакетов в Yii3 есть отдельная страничка: https://www.yiiframework.com/status/3.0. Ссылку на неё можно найти на странице с прогрессом. В футере есть ссылка с текстом: “Detailed release statuses”.
В опросе русскоязычного PHP-комьюнити Yii3 занял третью позицию в выборе фреймворка. Мы с командой приложим всевозможные силы, чтобы поднять фреймворк на позиции выше. Или, как минимум, увеличить процент использования.
Зачем выбирать Yii3, если есть Laravel/Symfony?
Yii2 славился своей отличной документацией. Документацию можно найти на любое из свойств класса, не то, что на модуль. Laravel таким похвастаться не может и довольно часто это становится проблемой при использовании данного фреймворка. В Yii3 мы постараемся держать планку по уровню документации.
Что Laravel, что Symfony в своей реализации имеют много спорных мест: сложности в нейминге, запутанные алгоритмы, поддержка старых версий PHP с использованием неэффективных методов и функций языка, сильное связывание компонентов фреймворка между собой. В Yii3 мы будем придерживаться обратных ценностей.
Yii2 – отличный инструмент для прототипирования. В Yii3 мы не будем отказываться от поддержки такой возможности. Конечно же, это не значит, что мы оставим Yii::$app для удобного доступа к компонентам фреймворка. Однако, доступ к компонентам будет быстрым и удобным с помощью Dependency Injection и настройкой всего компонента в файле конфигураций. Всем полюбившийся Gii будет существовать в наборе компонентов фреймворка.
Часто Yii2 критиковали за плохое решение с сервис-локатором Yii::$app и это было финальной точкой в принятии решения о выборе фреймворка. Теперь такой возможности не будет, а значит, что Yii3 не уступит в построении хорошей архитектуры приложения с правильным выделением доменного слоя и всего того, что любят сегодняшние PHP разработчики. По секрету скажу, что это и раньше не вызывало проблем ;)
Как всегда, фреймворк – это лишь инструмент. Нет одного универсального инструмента для решения всех задач. Есть удобные и подходящие. И не всегда они являются одним и тем же инструментом. Выбирайте инструменты с умом. Проводите нужные тесты, прокачивайте свою экспертность, узнавая новые вещи.
В последующих статьях вопросы сравнения удобства / производительности / возможностей аналогичных библиотек из других фреймворков подниматься не будут.
“Вышел ли Yii 3?” — спросите вы.
А я отвечу, что нет единого репозитория. Например, yiisoft/yii3, по тегу которого можно было бы судить, был релиз или нет.
Каждый компонент имеет свой релизный цикл. Компоненты не связаны со всем фреймворком. Сообщество время от времени сообщает нам, что готовые компоненты уже используются в продакшене. Как с Yii2, так и с другими фреймворками.
Следить за прогрессом можно здесь: https://www.yiiframework.com/yii3-progress. Найти эту страницу можно на главной. Вверху вы увидите кнопку с текстом: “Looking for Yii 3 progress?”.
Что будем рассматривать?
В статьях будут упоминаться такие понятия, как: “репозиторий”, “пакет”, “библиотека” или “инструмент”. Стоит изначально отписаться, что эти понятия обозначают одно и то же – набор классов, методов или функций для решения одной проблемы, упакованные в отдельный репозиторий.
В этой серии статей я буду рассматривать пакеты, которые уже имеют какой-либо тег. Тег – маркировка последовательности коммитов для удобного восприятия версий. Версионирование в Yii3 происходит по Semver.
Это значит:
Мажорные версии (X..) будут меняться тогда, когда произошло обратно несовместимое изменение.
Минорные версии (.X.) будут менять при улучшении текущего функционала без надобности слежения “а не сломалось ли ничего после обновления”
Наконец, патч версии (..X) будут меняться при исправлении ошибок в коде, которые не несут в себе надобности проверки на обратную совместимость, исправлении документации или других изменений, не связанных с логикой работы пакета.
По мере написания статьи будут появляться новые пакеты или версии. Их рассмотрим после или в к моменту рассмотрения этого же пакета.
У Yii3 существует ряд интересных документов. Как внутренних, для разработки, так и внешних, для пользователей. Множество таких документов вы можете найти по ссылке: https://github.com/yiisoft/docs.
Здесь же я бы хотел разобрать несколько основных моментов, чтобы попытаться закрыть некоторые часто-повторяющиеся вопросы и в дальнейшем не объяснять какие-то особенности.
Пакеты
Yii3, как вы помните, пакетный фреймворк. То есть конечный пакет лежит в отдельном репозитории. Пакет не будет зависеть от всего фреймворка, только от нужных вещей. Однако, такие пакеты может быть неудобно использовать в экосистеме Yii3. Я уверен, что пользователь хочет подключить себе пакет в проект и сразу же начать его использовать, а не создавать новый файл с конфигом, перетаскивать из документации примеры конфигурирования и пытаться настроить его оптимальным образом. Так ведь?
В экосистеме Yii3 существуют фреймворко-независимые пакеты и адаптеры, которые привязывают пакет к экосистеме. Такие пакеты имеют префикс yii-. Например, https://github.com/yiisoft/yii-middleware. Особенности этого пакета будут рассматриваться в дальнейших статьях, сейчас он для примера.
Помимо связывания пакетов фреймворка с самим фреймворком, мы делаем подобные связки с внешними библиотеками. Например, https://github.com/yiisoft/yii-sentry, https://github.com/yiisoft/yii-swagger и другие.
Неймспейсы
Неймспейс любого пакета в Yii3 состоит из:
Названия организации Yiisoft.
Названия пакета. Если в названии пакета существуют слова-префиксы, которые обозначают какую-то принадлежность или модульность, то название разбивается на несколько слов с обратным слэшем между словами. Например, https://github.com/yiisoft/yii-sentry превратится в Yiisoft\Yii\Sentry, а https://github.com/yiisoft/mailer-symfony превратится в Yiisoft\Mailer\Symfony.
Названия, которые логически состоят из двух или более слов, обратным слэшем не разделяются. Например, неймспейс для https://github.com/yiisoft/friendly-exception будет следующим: Yiisoft\FriendlyException
Поддержка PHP-версий
Yii1 имеет поддержку с PHP 5.1. Это сильно затрудняет развитие проекта, ограничивает использование нового синтаксиса, дает ограничения в использовании новой функциональности PHP, заставляет дублировать куски кода, чтобы они работали на разных версиях языка и так далее.
Yii3 будет поддерживать только те версии PHP, которые поддерживает сама команда разработки PHP. Временные рамки поддержи той или иной версии можно найти на официальном сайте PHP: https://www.php.net/supported-versions.php.
Исходя из этого, на момент написания статьи, пакеты в Yii3 поддерживают версии PHP выше 8.0, так как минимальная версия PHP, находящая на активной фазе поддержки – 8.0.
Некоторые пакеты из-за своей простоты могут всё еще поддерживать версию PHP 7.4. Но это не значит, что в следующем обновлении пакета поддержка этой версии останется.
Первая статья Yii3 Overview подходит к концу. Буду рад ответить на ваши вопросы как в комментариях, так и в личке. В следующих статьях разберу инструменты, которыми мы пользуемся для разработки Yii3, пройдусь по релизнутым библиотекам, разберу шаблоны и демо-проекты.
Полезные ссылки
Хроники Yii3. Постим там новости практически каждый день.
Канал для обсуждения Yii3. Задавайте вопросы, помогайте другим, принимайте участие в развитии фреймворка.
Инструкции, которые помогут вам стать контрибьютером.
Страничка, где вы можете выразить благодарность финансово и ускорить разработку фреймворка.
Комментарии (6)
SeregaVolDew
27.10.2022 00:03Хорошая статья, ждём следующую. Я же в свою очередь хочу спросить будет ли во вьюхах какой-нибудь шаблонизатор?
xEpozZ Автор
27.10.2022 00:06+2Сейчас можно использовать как обычный шаблонизатор, так и twig расширение. Список можно найти здесь: https://github.com/yiisoft/view#extensions
Если нужен какой-то другой, то можно создать issue/pull request и перевести поддержку на core команду.
Insa88
27.10.2022 01:17+4У laravel просто отличная документация, с кучей примеров и без необходимости лезть в кишки, а еще есть laracast с огромнейшим багажом нестандартных решений. Вам бы лучше в эту сторону идти, а не упарываться в phpdoc. Новичкам чтение лписаний методов класса ровным счетам не даст ничего.
xEpozZ Автор
27.10.2022 01:29+2Коллеги, работавшие и работающие с laravel часто высказывают ровно противоположное мнение. Да и сам натыкался на отсутствие внятной документации несколько лет назад, когда был проект на laravel.
Что касается PHPDoc, то его всегда стоит держать актуальным, примеры там часто спасают инспекцию кода. Документация будет строится и отдельно от PHPDoc, с примерами, туториалами и объяснениями. Данный цикл статей и направлен на развитие этой части ;)
FanatPHP
Спасибо! Будем ждать остальных статей цикла!
У меня сразу вопрос, возможно преждевременный. Не секрет, что своей популярностью Yii в немалой степени обязан так называемым "виджетам". При том что это было в общем-то не самое удачное решение с точки зрения архитектуры. Будет ли в Yii3 какой-то аналог? Чтобы и пользователям дать инструменты для давай-дававй и в продакшен, но и не приходилось отдирать прибитое гвоздями, чтобы прикрутить какое-то стороннее решение?
xEpozZ Автор
Если речь про виджеты, используемые в представлениях, то ответ – да, они есть.
По ссылке https://github.com/yiisoft/yii-widgets/#general-usage можно ознакомится с текущими виджетами.
Для кастомных виджетов можно пользоваться библиотекой https://github.com/yiisoft/widget. Там же есть примеры создания своих виджетов, а так же их "первичной" настройкой.