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