Обновление с версии 2.0
Если вы ещё не работали с Yii 2.0, этот раздел можно пропустить и сразу перейти к разделу "Начало работы".
Несмотря на общие идеи и ценности, Yii3 концептуально отличается от Yii 2.0. Простого пути обновления нет, поэтому сначала ознакомьтесь с политикой поддержки и сроками окончания жизненного цикла Yii 2.0 и подумайте о том, чтобы начинать новые проекты на Yii3, продолжая поддерживать существующие на Yii 2.0.
Требования к PHP
Yii3 требует PHP версии 8.2 или выше. В связи с этим в фреймворке используются языковые возможности, отсутствовавшие в Yii 2.0:
- Объявления типов
- Объявления типов возвращаемых значений
- Видимость констант класса
- Именованные аргументы
- Анонимные классы
- ::class
- Генераторы
- Функции с переменным числом аргументов
- Readonly-свойства
- Readonly-классы
- Продвижение свойств из конструктора
- Атрибуты
Предварительный рефакторинг
Перед переносом проекта с Yii 2.0 на Yii3 рекомендуется выполнить рефакторинг. Это упростит процесс переноса и принесёт пользу проекту на этапе, когда он ещё не переведён на Yii3.
Используйте DI вместо сервис-локатора
Поскольку Yii3 требует явного внедрения зависимостей, рекомендуется заранее подготовиться и перейти от использования сервис-локатора (Yii::$app->) к использованию DI-контейнера.
Если использование DI-контейнера по какой-либо причине затруднено, рассмотрите возможность переноса всех вызовов Yii::$app-> в контроллеры и виджеты, передавая зависимости вручную от контроллера к объектам, которые их используют.
Подробное объяснение концепции представлено в Внедрение зависимостей и контейнер внедрения зависимостей.
Используйте репозитории для получения данных
Поскольку Active Record не является единственным способом работы с базой данных в Yii3, рекомендуется внедрить репозитории, которые будут скрывать детали получения данных и объединять их в одном месте. Впоследствии их можно будет переработать:
php
final readonly class PostRepository
{
public function getArchive()
{
// ...
}
public function getTop10ForFrontPage()
{
// ...
}
}Отделите доменный слой от инфраструктуры
Если у вас сложная предметная область, рекомендуется отделить её от инфраструктуры, предоставляемой фреймворком, чтобы вся бизнес-логика находилась во фреймворк-независимых классах.
Перенесите больше в компоненты
Сервисы Yii3 концептуально похожи на компоненты Yii 2.0, поэтому рекомендуется перемещать повторно используемые части приложения в компоненты.
Что стоит изучить
Docker
Шаблоны приложений по умолчанию используют Docker для запуска. Рекомендуется изучить как с ним работать, и применять его в своих проектах, поскольку он даёт множество преимуществ:
- Точно такое же окружение, как и в продакшене.
- Не нужно устанавливать ничего, кроме самого Docker.
- Окружение — на уровне приложения, а не сервера.
Переменные окружения
Шаблоны приложений Yii3 используют переменные окружения для настройки частей приложения. Эта концепция очень удобна для приложений, работающих в Docker, но может быть непривычна пользователям Yii 1.1 и Yii 2.0.
Действия
В отличие от Yii 2.0, Yii3 не требует контроллеров. Вместо них используются Действия, которые могут быть любыми вызываемыми объектами. Их можно организовать в контроллеры, как в Yii 2, но это не обязательно.
Структура приложения
Предлагаемая структура приложения Yii3 отличается от Yii 2.0. Она описана в разделе структура приложения.
Несмотря на это, Yii3 остаётся гибким, поэтому всё ещё возможно использовать структуру, аналогичную Yii 2.0.