Skip to content

Обновление с версии 2.0

Если вы ещё не работали с Yii 2.0, этот раздел можно пропустить и сразу перейти к разделу "Начало работы".

Несмотря на общие идеи и ценности, Yii3 концептуально отличается от Yii 2.0. Простого пути обновления нет, поэтому сначала ознакомьтесь с политикой поддержки и сроками окончания жизненного цикла Yii 2.0 и подумайте о том, чтобы начинать новые проекты на Yii3, продолжая поддерживать существующие на Yii 2.0.

Требования к PHP

Yii3 требует PHP версии 8.2 или выше. В связи с этим в фреймворке используются языковые возможности, отсутствовавшие в Yii 2.0:

Предварительный рефакторинг

Перед переносом проекта с 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 для запуска. Рекомендуется изучить как с ним работать, и применять его в своих проектах, поскольку он даёт множество преимуществ:

  1. Точно такое же окружение, как и в продакшене.
  2. Не нужно устанавливать ничего, кроме самого Docker.
  3. Окружение — на уровне приложения, а не сервера.

Переменные окружения

Шаблоны приложений Yii3 используют переменные окружения для настройки частей приложения. Эта концепция очень удобна для приложений, работающих в Docker, но может быть непривычна пользователям Yii 1.1 и Yii 2.0.

Действия

В отличие от Yii 2.0, Yii3 не требует контроллеров. Вместо них используются Действия, которые могут быть любыми вызываемыми объектами. Их можно организовать в контроллеры, как в Yii 2, но это не обязательно.

Структура приложения

Предлагаемая структура приложения Yii3 отличается от Yii 2.0. Она описана в разделе структура приложения.

Несмотря на это, Yii3 остаётся гибким, поэтому всё ещё возможно использовать структуру, аналогичную Yii 2.0.