Шаблон продвинутого приложения

Этот шаблон предназначен для больших проектов, разрабатываемых в группах, где бекэнд отделен от фронтэнда, приложение разворачивается на нескольких серверах и т.д. Этот шаблон приложения дает больше чем просто структуру и предоставляет из коробки базу данных, механизм регистрации и восстановления пароля.

Установка

Установка с помощью Cjmposer

Если в Вашей системе еще не установлен Composer, можете скачать его по ссылке http://getcomposer.org/, или выполните следующую команду в ОС Linux/Unix/MacOS:

curl -s http://getcomposer.org/installer | php

Вы можете установить шаблон приложения следующей командой:

php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced /path/to/yii-application

Начало

После установки, Вам нужно выполнить несколько шагов, что бы инициализировать приложение. Вам нужно будет сделать это только один раз.

  1. Выполните команду init и выберите в качестве окружения dev.
php /path/to/yii-application/init
  1. Содайте новую базу данных внесите соответствующие изменения в конфигурацию components.db в common/config/main-local.php.
  2. выполните миграцию с помощью консольной команды yii migrate.
  3. Установите корневой каталог Вашего веб-сервера:

* для фронтэнда /path/to/yii-application/frontend/web/ и используйте URL-адрес http://frontend/ * для бекэнда /path/to/yii-application/backend/web/ и используйте URL-адрес http://backend/

Структура каталогов

Корневой каталог содержит следующие подкаталоги:

  • backend - бекэнд приложения.
  • common - общие файлы всех приложений.
  • console - консольное приложение.
  • environments - настройки окружения.
  • frontend - фронтэнд приложения.

Корневой каталог содержит набор файлов.

  • .gitignore содержит список файлов игнорируемых версионным хранилищем git.
  • composer.json - конфигурация Composer, подробнее описано ниже.
  • init - скрипт инициализации.
  • init.bat - тоже для Windows.
  • LICENSE.md - информация о лицензии. Можете разместить здесь свою лицензию.
  • README.md - простая информация об установленном шаблоне. Подумайте о замене информацией о вашем проекте и его установке.
  • requirements.php - проверка требований Yii.
  • yii - стартовое консольное приложение.
  • yii.bat - тоже для Windows.

Предопределенные псевдонимы пути

  • @yii - каталог фреймворка.
  • @app - каталог текущего приложения.
  • @common - каталог общих файлов.
  • @frontend - каталог фронтэнда веб приложения.
  • @backend - каталог бекэнда веб приложения.
  • @console - каталог консольного приложения.
  • @runtime - каталог логов, файлового кеша и т.п. текущего веб-приложения.
  • @vendor - каталог фалов сторонних поставщиков Composer.
  • @web - базовый URL текущего веб-приложения.
  • @webroot - корневой веб-каталог текущего приложения.

Приложения

Шаблон продвинутого приложения содержит три приложения: фронтэнд, бекэнд и консольное. Фронтэнд - это обычно то, что представляет пользователю проект. Бекэнд - это панель администратора, аналитика и другой, подобный функционал. Консольное приложение обычно используется как задачи cron и низкоуровневого управления сервером. Также оно используется во время развертывания приложения и как обработчик миграций и ресурсов.

Шаблон также содержит каталог common, который содержит файлы, используемые более чем одним приложением. Например, модель User.

Фронтэнд и бекэнд веб-приложения и оба содержат каталог web. Это корневой веб-каталог, на который нужно настроить Ваш веб-сервер.

Каждое приложение имеет свое собственное пространство имен и псевдоним, соответствующий своему названию. Это также относится к каталогу common.

Конфигурация и окружение

Существует несколько проблем связанных с конфигурацией:

  • У каждого члена команды есть свои параметры конфигурации. Коммит такой конфигурации заденет всех членов команды.
  • Пароль от продакшн базы данных и ключи API не должны храниться в репозитории.
  • Может быть несколько серверов: разработка, тестирование, продакшн. Каждый может иметь свою конфигурацию.
  • Определение всех опций конфигурации на все случаи - это монотонная работа и отнимает много времени при обслуживании.

Для решения этих проблем в Yii вводится понятие окружения, которое на самом деле очень простое. Каждое окружение представляет собой набор файлов в каталоге environments. Команда init используется для переключения между ними. На самом деле, она просто копирует все содержимое каталога окружения в корневой каталог приложений.

Обычно окружение содержит стартовые файлы приложения, такие как index.php и конфигурационные файлы с суффиксом -local.php. Они добавлены в .gitignore и не попадут в репозиторий.

Во избежание дублирования фалы конфигурации переопределяют друг друга. Например, frontend считывает конфигурацию в следующем порядке:

  • common/config/main.php
  • common/config/main-local.php
  • frontend/config/main.php
  • frontend/config/main-local.php

Параметры считываются в следующем порядке:

  • common/config/params.php
  • common/config/params-local.php
  • frontend/config/params.php
  • frontend/config/params-local.php

Следующий файл переопределят предыдущий

Ниже приведена полная схема:

Схема считывания конфигурации

Конфигурация Composer

После того как шаблон приложения установлен хорошая мысль настроить composer.json который можно найти в корневом каталоге:

{
    "name": "yiisoft/yii2-app-advanced",
    "description": "Yii 2 Advanced Application Template",
    "keywords": ["yii", "framework", "advanced", "application template"],
    "homepage": "http://www.yiiframework.com/",
    "type": "project",
    "license": "BSD-3-Clause",
    "support": {
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": "*",
        "yiisoft/yii2-swiftmailer": "*",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*"
    },
    "scripts": {
        "post-create-project-cmd": [
            "yii\\composer\\Installer::setPermission"
        ]
    },
    "extra": {
        "writable": [
            "backend/runtime",
            "backend/web/assets",
 
            "console/runtime",
            "console/migrations",
 
            "frontend/runtime",
            "frontend/web/assets"
        ]
    }
}

Сначала измените основную информацию. Измените name, description, keywords, homepage и support в соответствии с вашим проектом.

Интересный момент. В разделе require Вы можете указать дополнительные пакеты нужные для Вашего приложения. Все эти пакеты поступают с сайта packagist.org, так что не стесняйтесь просмотреть этот сайт в поисках полезного кода.

После того, как Вы изменили composer.json, Вы можете запустить команду php composer.phar update --prefer-dist, подождите пока пакеты загрузятся и будут установлены, и можете ими пользоваться. Автозагрузка классов будет происходить автоматически.

Создание ссылок от бекэнда к фронтенду

Часто требуется создать ссылки от бекэнд приложения к фронтэнд приложению. Так как фронтэнд приложение может содержать свои собственные правила URL менеджера, Вам нужно дублировать их для бекэнд приложения называя их по разному:

return [
    'components' => [
        'urlManager' => [
            // here is your normal backend url manager config
        ],
        'urlManagerFrontend' => [
            // here is your frontend URL manager config
        ],
 
    ],
];

После того как это сделано, Вы можете получить URL-адрес указывающий на фронтэнд следующим образом:

echo Yii::$app->urlManagerFrontend->createUrl(...);

Авторизация