Приложения это объекты, которые управляют всей структурой и жизненным циклом прикладной системы Yii.
Каждая Yii прикладная система включает в себя один объект приложения, который создается в [входном скрипте](structure-entry-scripts.md)
и глобально доступен через `\Yii::$app`.
Каждая Yii прикладная система включает в себя один объект приложения, который создается во [входном скрипте](structure-entry-scripts.md) и глобально доступен через `\Yii::$app`.
> Информация: В зависимости от контекста, когда мы говорим "приложение", это может означать как объект приложения так и
прикладную систему приложения в целом.
приложение как прикладную систему в целом.
Существует два вида приложений: [[yii\web\Application|веб приложения]] и [[yii\console\Application|консольные приложения]].
Как можно догадаться по названию, первый тип в основном занимается обработкой веб запросов, в то время как последний - консольных команд.
Также как и обычные [конфигурации](concept-configurations.md), конфигурации приложения указывают как следует инициализировать
свойства объектов приложения. Из-за того, что конфигурации приложений часто являются сложными, они разбиваются на несколько
[конфигурационных файлов](concept-configurations.md#configuration-files), например, `web.php` файл в приведенном выше примере.
свойства объектов приложения. Из-за того, что конфигурация приложения часто является очень сложной, она разбивается на несколько [конфигурационных файлов](concept-configurations.md#configuration-files), например, `web.php` - файл в приведенном выше примере.
## Свойства приложений <a name="application-properties"></a>
Свойство [[yii\base\Application::basePath|basePath]] указывает на корневую папку приложения. Это папка, которая содержит
весь код прикладной системы приложения. В данной папке обычно могут находится подпапки `models`, `views`, `controllers`, которые
содержат код, отвечающий шаблону проектирования MVC.
Свойство [[yii\base\Application::basePath|basePath]] указывает на корневую директорию приложения. Эта директория содержит
весь защищенный исходный код приложения. В данной директории обычно могут находится поддиректории `models`, `views`, `controllers`, содержащие код, соответствующий шаблону проектирования MVC.
Вы можете настроить свойство [[yii\base\Application::basePath|basePath]] указав напрямую путь к каталогу через
[псевдонимы пути](concept-aliases.md). В обоих случаях, указанная папка должна существовать, иначе будет брошено исключение.
Путь будет нормализован с помощью вызова функции `realpath()`.
Вы можете задать свойство [[yii\base\Application::basePath|basePath]] используя путь к директории или используя
[псевдоним пути](concept-aliases.md). В обоих случаях, указанная директория должна существовать, иначе будет выброшено исключение. Путь будет нормализован функцией `realpath()`.
Свойство [[yii\base\Application::basePath|basePath]] часто используется для получения других важных путей, например, путь к
runtime папке, которая используется в процессе работы приложения. Именно по этой причине, псевдоним пути `@app` является
предопределенным и указывает на данную папку. Другие пути могут быть получены с помощью использования псевдонима пути, например,
`@app/runtime`.
Свойство [[yii\base\Application::basePath|basePath]] часто используется для указания других важных путей (например, путь к
директории runtime, используемой приложением). По этой причине, псевдоним пути `@app` предустановлен и содержит данный путь. Производные пути могут быть получены с использованием этого псевдонима пути (например, `@app/runtime` указывает на времененную исполняемую(runtime) дирректорию).
### Важные свойства <a name="important-properties"></a>
Свойства, указанные в этом подразделе, часто должны быть настроены т. к. они могут отличаться от приложения к приложению.
Свойства, указанные в этом подразделе, часто нуждаются в преднастройке т.к. они разнятся от приложения к приложению.
Это свойство позволяет настроить вам множество [псевдонимов](concept-aliases.md) в рамках массива.
Ключами массива являются имена псевдонимов, а ключами - соответствующие значение пути. Например,
Ключами массива являются имена псевдонимов, а значениями массива - соответствующие значения пути. Например,
```php
[
...
...
@@ -88,7 +82,7 @@ runtime папке, которая используется в процессе
]
```
Это свойство доступно таким образом, чтобы вы могли указывать псевдонимы в рамках конфигураций приложения,
Это свойство доступно таким образом, чтобы вы могли указывать псевдонимы в рамках конфигурации приложения,
а не вызовов метода [[Yii::setAlias()]].
...
...
@@ -105,7 +99,8 @@ ID в качестве элемента данного свойства.
- ID, указанный в [компонентах](#components);
- ID модуля, указанный в [модулях](#modules);
- название класса;
- массив конфигурации.
- массив конфигурации;
- анонимная функция, которая создает и возвращает компонент.
Например,
...
...
@@ -116,19 +111,31 @@ ID в качестве элемента данного свойства.
'demo',
// название класса
'app\components\TrafficMonitor',
'app\components\Profiler',
// массив конфигурации
[
'class'=>'app\components\Profiler',
'level'=>3,
]
],
// анонимная функция
function(){
returnnewapp\components\Profiler();
}
],
]
```
> Info: Если идентификатор(ID) модуля такой же, как идентификатор компонента приложения, то в процессе [начальной загрузки](runtime-bootstrapping.md) будет использован компонент приложения. Если Вы вместо этого хотите использовать модуль, то можете указать его при помощью анонимной функции похожей на эту:
>```php
[
function () {
return Yii::$app->getModule('user');
},
]
```
В процессе начальной загрузки, каждый компонент будет создан. Если класс компонента имеет интерфейс [[yii\base\BootstrapInterface]], то
также будет вызван метод [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]].
В процессе [начальной загрузки](runtime-bootstrapping.md), каждый компонент будет создан. Если класс компонента имеет интерфейс [[yii\base\BootstrapInterface]], то также будет вызван метод [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]].
Еще одним практическим примером является конфигурация [базового шаблона приложения](start-installation.md), в котором
модули `debug` и `gii` указаны как `bootstrap` компоненты, когда приложение находится в отладочном режиме.
...
...
@@ -144,19 +151,17 @@ if (YII_ENV_DEV) {
}
```
> Примечание: Указывание слишком большого количества компонентов в `bootstrap` приведет к снижению производительности приложения,
> Примечание: Указывание слишком большого количества компонентов в [`bootstrap`](runtime-bootstrapping.md) приведет к снижению производительности приложения,
потому что для каждого запроса одно и то же количество компонентов должно быть загружено. Таким образом вы должны использовать
Данное свойство поддерживается только [[yii\web\Application|веб приложениями]].Оно указывает [действие контроллера](structure-controllers.md),
которое должно обрабатывать все входящие запросы от пользователя. В основном это используется, когда приложения находится в
режиме обслуживания и должно обрабатывать все запросы через одно действие.
Данное свойство поддерживается только [[yii\web\Application|веб приложениями]].Оно указывает [действие контроллера](structure-controllers.md), которое должно обрабатывать все входящие запросы от пользователя. В основном это используется, когда приложения находится в режиме обслуживания и должно обрабатывать все запросы через одно действие.
Конфигурация это массив, первый элемент которого, указывает маршрут действия. Остальные элементы в формате ключ-значение
указывают дополнительные параметры, которые должны быть переданы действию. Например,
Конфигурация это массив, первый элемент которого, определяет маршрут действия. Остальные элементы в формате пара ключ-значение задают дополнительные параметры, которые должны быть переданы действию (методу контроллера actionXXX).
Данное свойство является наиболее важным. Оно позволяет вам указать список компонентов, которые называются [компоненты приложения](#structure-application-components.md),
которые вы можете использовать в других местах. Например,
Данное свойство является наиболее важным. Оно позволяет вам зарегистрировать список именованных компонентов, называемых [компоненты приложения](#structure-application-components.md), которые Вы можете использовать в других местах.
Например,
```php
[
...
...
@@ -188,22 +193,16 @@ if (YII_ENV_DEV) {
]
```
Каждый компонент приложения указан массивом в формате ключ-значение. Ключ представляет собой ID компонента приложения, в то время
как значение представляет собой название класса или [конфигурацию](concept-configurations.md).
Каждый компонент приложения указан массивом в формате ключ-значение. Ключ представляет собой ID компонента приложения, в то время как значение представляет собой название класса или [конфигурацию](concept-configurations.md).
Вы можете зарегистрировать любой компонент в приложении, позже этот компонент будет глобально доступен
через выражение `\Yii::$app->ComponentID`.
Вы можете зарегистрировать любой компонент в приложении, позже этот компонент будет глобально доступен через выражение `\Yii::$app->ComponentID`.
Более детальная информация приведена в разделе [Компоненты приложения](structure-application-components.md).
Более подробная информация приведена в разделе [Компоненты приложения](structure-application-components.md).
Данное свойство позволяет вам устанавливать соответствия между ID контроллера и его классом. По-умолчанию, Yii устанавливает
соответствие между ID контроллера и его классом согласно данному [соглашению](#controllerNamespace)(таким образом,
ID `post` будет соответствовать `app\controllers\PostController` ). С помощью настройки этого свойства вы можете изменить
соглашение для нужных контроллеров. В приведенном ниже примере, `account` будет соответствовать `app\controllers\UserController`,
в то время как `article` будет соответствовать `app\controllers\PostController`.
Данное свойство позволяет вам задавать соответствия(mapping) между ID контроллера и произвольным классом контроллера. По-умолчанию, Yii задает соответствие между ID контроллера и его классом согласно данному [соглашению](#controllerNamespace) (таким образом, ID `post` будет соответствовать `app\controllers\PostController` ). Задавая эти свойства вы можете переопределить соответствия для необходимых контроллеров. В приведенном ниже примере, `account` будет соответствовать контроллеру `app\controllers\UserController`, в то время как `article` будет соответствовать контроллеру `app\controllers\PostController`.
```php
[
...
...
@@ -219,8 +218,8 @@ ID `post` будет соответствовать `app\controllers\PostControl
]
```
Ключами данного свойства являются ID контроллеров, а значениями являются название
класса контроллера или [конфигурация](concept-configurations.md).
Ключами данного свойства являются ID контроллеров, а значениями являются соответствующие названия
классов(полное название класса с пространством имен) контроллера или [конфигурация](concept-configurations.md).
@@ -229,14 +228,12 @@ ID `post` будет соответствовать `app\controllers\PostControl
По-умолчанию значение равно `app\controllers`. Если ID контроллера `post`, то согласно соглашению, соответствующий класс
контроллера (без пространства имен) будет равен `PostController`, а полное название класса будет равно `app\controllers\PostController`.
Класс контроллера может также находиться в подпапке папки, которая соответствует этому пространству имен.
Например, дан ID контроллера `admin/post`, соответствующие полное имя класса контроллера будет`app\controllers\admin\PostController`.
Класс контроллера может также находиться в поддиректории директории, соответствующей этому пространству имен.
Например, ID контроллера `admin/post`, будет соответветствовать полное имя класса контроллера `app\controllers\admin\PostController`.
Очень важно, чтобы полное имя класса контроллера могло быть использовано [автозагрузкой](concept-autoloading.md) и соответствующее
пространство имен вашего контроллера соответствовало данному свойству. Иначе, вы получите ошибку "Страница не найдена", когда
попытаетесь получить доступ к приложению.
Очень важно, чтобы полное имя класса контроллера могло быть использовано [автозагрузкой](concept-autoloading.md) и соответствующее пространство имен вашего контроллера соответствовало данному свойству. Иначе, Вы получите ошибку "Страница не найдена", при доступе к приложению.
В случае, если вы хотите изменить соглашение как описано выше, вы можете использовать свойство [controllerMap](#controllerMap).
В случае, если вы хотите переопределить соответствия как описано выше, вы можете настроить свойство [controllerMap](#controllerMap).