Skip to content

Commit 28403dd

Browse files
committed
concept configurations on russian and small typo fix to english version
1 parent a8423bb commit 28403dd

File tree

2 files changed

+281
-2
lines changed

2 files changed

+281
-2
lines changed
+279
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
Настройки
2+
==============
3+
4+
Настройки широко используются в Yii при создании новых объектов или при инициализации уже существующих объектов.
5+
Обычно настройки включают в себя названия классов создаваемых объектов и список первоначальных значений
6+
которые должны быть присвоены [свойствам](concept-properties.md) объекта. Также в настройках можно указать список
7+
[обработчиков событий (event handlers)](concept-events.md) объекта, и/или список
8+
[поведений (behaviors)](concept-behaviors.md) объекта.
9+
10+
Пример настроек подключения к базе данных и дальнейшей инициализации подключения:
11+
12+
```php
13+
$config = [
14+
'class' => 'yii\db\Connection',
15+
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
16+
'username' => 'root',
17+
'password' => '',
18+
'charset' => 'utf8',
19+
];
20+
21+
$db = Yii::createObject($config);
22+
```
23+
24+
Ключ 'class' в настройках указывает на основе какого файла должен создаваться объект. Затем метод [[Yii::createObject()]]
25+
создает объект $db на основе класса указанного в ключе 'class' массива $config. После инициализации объекта будут
26+
использованы оставшиеся параметры настроек для инициализации свойств объекта, обработчиков событий и/или поведений.
27+
28+
Если вы создали объект, то, используя метод [[Yii::configure()]], вы можете инициализировать свойства этого объекта
29+
с помощью массива, в котором указаны настройки.
30+
Пример:
31+
32+
```php
33+
Yii::configure($object, $config);
34+
```
35+
36+
Обратите внимание, что при таком способе использования настроек массив с настройками не должен содержать ключ 'class'
37+
и его значение.
38+
39+
40+
## Формат Настроек <a name="configuration-format"></a>
41+
42+
Формат настроек выглядит следующим образом:
43+
44+
```php
45+
[
46+
'class' => 'ClassName',
47+
'propertyName' => 'propertyValue',
48+
'on eventName' => $eventHandler,
49+
'as behaviorName' => $behaviorConfig,
50+
]
51+
```
52+
53+
где
54+
55+
* Элемент `class` указывает полное имя создаваемого объекта.
56+
* Элементы `propertyName` указывают первоначальные значения свойств создаваемого объекта. Ключи являются именами свойств
57+
создаваемого объекта, а значения ключей - значениями свойств создаваемого объекта.
58+
Таким способом могут быть установлены только публичные переменные объекта и [свойства](concept-properties.md),
59+
созданные через геттеры/сеттеры (getters/setters).
60+
* Элементы `on eventName` указывают какие обработчики должны быть установлены для [событий](concept-events.md) объекта.
61+
Обратите внимание, что ключи массива начинаются с `on `. Чтобы узнать весь список поддерживаемых видов
62+
обработчиков событий обратитесь в раздел [события](concept-events.md)
63+
* Элементы `as behaviorName` указывают какие [поведения](concept-behaviors.md) должны быть установлены для объекта.
64+
Обратите внимание, что ключи массива начинаются с `as `. `$behaviorConfig` это массив для настройки
65+
поведения, этот массив такой же как тот, о котором идет речь.
66+
67+
Пример настроек с установкой первоначальных значений свойств объекта, с установкой обработчика событий и поведения:
68+
69+
```php
70+
[
71+
'class' => 'app\components\SearchEngine',
72+
'apiKey' => 'xxxxxxxx',
73+
'on search' => function ($event) {
74+
Yii::info("Keyword searched: " . $event->keyword);
75+
},
76+
'as indexer' => [
77+
'class' => 'app\components\IndexerBehavior',
78+
// ... property init values ...
79+
],
80+
]
81+
```
82+
83+
84+
## Использование Настроек <a name="using-configurations"></a>
85+
86+
Возможность настраивания широко используется в Yii. В самом начале данной главы мы увидели как
87+
создать объект с необходимыми параметрами используя метод [[Yii::createObject()]].
88+
В данном разделе речь пойдет о настройках приложения и настройках виджетов (widget) - два основных способа
89+
использования настроек.
90+
91+
92+
### Настройки Приложения <a name="application-configurations"></a>
93+
94+
Настройки [приложения](structure-applications.md) пожалуй самые сложные из используемых в фреймворке.
95+
Причина в том, что класс [[yii\web\Application|application]] содержит большое количество настраиваемых
96+
свойств и событий. Важно отметить, что свойство приложения, именуемое [[yii\web\Application::components|components]]
97+
может принимать массив из настроек(которые являются массивом) для создания компонентов, регистрируемых на уровне
98+
приложения.
99+
Пример настроек приложения для [простого шаблона приложения (basic application template)](start-basic.md).
100+
101+
```php
102+
$config = [
103+
'id' => 'basic',
104+
'basePath' => dirname(__DIR__),
105+
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
106+
'components' => [
107+
'cache' => [
108+
'class' => 'yii\caching\FileCache',
109+
],
110+
'mail' => [
111+
'class' => 'yii\swiftmailer\Mailer',
112+
],
113+
'log' => [
114+
'class' => 'yii\log\Dispatcher',
115+
'traceLevel' => YII_DEBUG ? 3 : 0,
116+
'targets' => [
117+
[
118+
'class' => 'yii\log\FileTarget',
119+
],
120+
],
121+
],
122+
'db' => [
123+
'class' => 'yii\db\Connection',
124+
'dsn' => 'mysql:host=localhost;dbname=stay2',
125+
'username' => 'root',
126+
'password' => '',
127+
'charset' => 'utf8',
128+
],
129+
],
130+
];
131+
```
132+
133+
Ключ `class` в данных настройках не указывается. Причина в том, что класс вызывается по полному имени во
134+
[входном скрипте (entry script)](structure-entry-scripts.md):
135+
136+
```php
137+
(new yii\web\Application($config))->run();
138+
```
139+
140+
Для более подробной документации о том как настроить свойство приложения `components` обратитесь к главам
141+
[Приложения (Applications)](structure-applications.md) и [Service Locator](concept-service-locator.md).
142+
143+
144+
### Настройки Виджетов <a name="widget-configurations"></a>
145+
146+
При использовании [виджетов](structure-widgets.md) часто возникает необходимость изменить параметры виджета с помощью
147+
настроек. Для создания виджета можно использовать два метода: [[yii\base\Widget::widget()]] и
148+
[[yii\base\Widget::beginWidget()]]. Оба метода принимают настройки в виде массива.
149+
Пример:
150+
151+
```php
152+
use yii\widgets\Menu;
153+
154+
echo Menu::widget([
155+
'activateItems' => false,
156+
'items' => [
157+
['label' => 'Home', 'url' => ['site/index']],
158+
['label' => 'Products', 'url' => ['product/index']],
159+
['label' => 'Login', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest],
160+
],
161+
]);
162+
```
163+
164+
Данный код создает виджет `Menu` и устанавливает параметр виджета `activeItems` в значение false.
165+
Также устанавливается параметр `items`, состоящий из элементов меню.
166+
167+
Обратите внимание что парамт `class` НЕ передается, т.к. полное имя уже указано.
168+
169+
170+
## Файлы Настроек <a name="configuration-files"></a>
171+
172+
Если настройки сложные, то такие настройки, как правило, разделяют по нескольким PHP файлам. Такие файлы называют
173+
*файлами настроек* или *конфигурационными файлами*. Файл настроек возвращает (используя return) массив с настройками.
174+
Например, настройки приложения можно хранить в отдельном файле `web.php`, как показано ниже:
175+
176+
```php
177+
return [
178+
'id' => 'basic',
179+
'basePath' => dirname(__DIR__),
180+
'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),
181+
'components' => require(__DIR__ . '/components.php'),
182+
];
183+
```
184+
185+
Параметр `components` также имеет сложную конфигурацию, поэтому можно его хранить в файле `components.php`
186+
и подключать в файл `web.php` используя `require` как и показано выше.
187+
Содержимое файла `components.php`:
188+
189+
```php
190+
return [
191+
'cache' => [
192+
'class' => 'yii\caching\FileCache',
193+
],
194+
'mail' => [
195+
'class' => 'yii\swiftmailer\Mailer',
196+
],
197+
'log' => [
198+
'class' => 'yii\log\Dispatcher',
199+
'traceLevel' => YII_DEBUG ? 3 : 0,
200+
'targets' => [
201+
[
202+
'class' => 'yii\log\FileTarget',
203+
],
204+
],
205+
],
206+
'db' => [
207+
'class' => 'yii\db\Connection',
208+
'dsn' => 'mysql:host=localhost;dbname=stay2',
209+
'username' => 'root',
210+
'password' => '',
211+
'charset' => 'utf8',
212+
],
213+
];
214+
```
215+
216+
Чтобы получить настройки, хранимые в файле, достаточно подключить файл с помощью `require`.
217+
Пример:
218+
219+
```php
220+
$config = require('path/to/web.php');
221+
(new yii\web\Application($config))->run();
222+
```
223+
224+
225+
## Настройки по умолчанию <a name="default-configurations"></a>
226+
227+
Метод [[Yii::createObject()]] реализован с использованием [dependency injection container](concept-di-container.md).
228+
Это позволяет указывать так называемые *настройки по умолчанию*, которые будут применены ВСЕМ экземплярам классов
229+
во время их инициализации методом [[Yii::createObject()]].
230+
Настройки по умолчанию указываются с помощью метода `Yii::$container->set()` в разделе [предварительной загрузки (bootstrapping)](runtime-bootstrapping.md).
231+
232+
Например, если мы хотим изменить виджет [[yii\widgets\LinkPager]] так, чтобы все виджеты данного вида показывали
233+
5 кнопок на странице вместо 10 (как это установлено изначально), то в нашем случае код будет таким:
234+
235+
```php
236+
\Yii::$container->set('yii\widgets\LinkPager', [
237+
'maxButtonCount' => 5,
238+
]);
239+
```
240+
241+
Если бы мы не установили настройки по умолчанию, то тогда нам нужно было бы каждый раз при использовании LinkPager
242+
указывать настройки `maxButtonCount`.
243+
244+
245+
## Константы Окружения (Environment Constants) <a name="environment-constants"></a>
246+
247+
Настройки могут различаться в зависимости от окружения, в котором происходит запуск приложения. Например,
248+
в среде разработчика(development environment), вы используете базу данных `mydb_dev`, а на продакшн сервере базу данных
249+
`mydb_prod`. Для упрощения смены окружений в Yii существует константа `YII_ENV`. Вы можете указать её во
250+
[входном скрипте (entry script)](structure-entry-scripts.md) своего приложения.
251+
Пример:
252+
253+
```php
254+
defined('YII_ENV') or define('YII_ENV', 'dev');
255+
```
256+
257+
`YII_ENV` может принимать следующие значения:
258+
259+
- `prod`: production окружение, т.е. окружение для конечного сервера. Константа `YII_ENV_PROD` установится в значение true.
260+
- `dev`: development окружение, т.е. окружение для разработки. Константа `YII_ENV_DEV` установится в значение true.
261+
- `test`: testing окружение, т.е. окружения для тестирования. Константа `YII_ENV_TEST` установится в значение true.
262+
263+
По умолчанию константа `YII_ENV`, установлена в значение `prod`.
264+
265+
Используя эти константы вы можете изменить настройки в соответствии с вашим окружением.
266+
Например, чтобы включить [отладочную панель и отладчик](tool-debugger.md) в development окружении вы можете использовать
267+
следующие настройки приложения:
268+
269+
```php
270+
$config = [...];
271+
272+
if (YII_ENV_DEV) {
273+
// настройки для 'dev' окружения
274+
$config['bootstrap'][] = 'debug';
275+
$config['modules']['debug'] = 'yii\debug\Module';
276+
}
277+
278+
return $config;
279+
```

docs/guide/concept-configurations.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ where
5858
Notice that the array keys are formed by prefixing event names with `on `. Please refer to
5959
the [Events](concept-events.md) section for supported event handler formats.
6060
* And the `as behaviorName` elements specify what [behaviors](concept-behaviors.md) should be attached to the object.
61-
Notice that the array keys are formed by prefixing behavior names with `on `. `$behaviorConfig` represents
61+
Notice that the array keys are formed by prefixing behavior names with `as `. `$behaviorConfig` represents
6262
the configuration for creating a behavior, like a normal configuration as we are describing here.
6363

6464
Below is an example showing a configuration with property initial values, event handlers and behaviors:
@@ -80,7 +80,7 @@ Below is an example showing a configuration with property initial values, event
8080

8181
## Using Configurations <a name="using-configurations"></a>
8282

83-
Configurations are used in many places in Yii. At the beginning of this section, we have shown how to use
83+
Configurations are used in many places in Yii. At the beginning of this section, we have shown how to
8484
create an object according to a configuration by using [[Yii::createObject()]]. In this subsection, we will
8585
describe application configurations and widget configurations - two major usages of configurations.
8686

0 commit comments

Comments
 (0)