From 28403dd35f1609baf50f8a61bf7042028e313ab8 Mon Sep 17 00:00:00 2001 From: zxcq544 Date: Wed, 18 Jun 2014 16:14:48 +0400 Subject: [PATCH] concept configurations on russian and small typo fix to english version --- docs/guide-ru/concept-configurations.md | 279 ++++++++++++++++++++++++ docs/guide/concept-configurations.md | 4 +- 2 files changed, 281 insertions(+), 2 deletions(-) create mode 100644 docs/guide-ru/concept-configurations.md diff --git a/docs/guide-ru/concept-configurations.md b/docs/guide-ru/concept-configurations.md new file mode 100644 index 0000000000..bb0cce235b --- /dev/null +++ b/docs/guide-ru/concept-configurations.md @@ -0,0 +1,279 @@ +Настройки +============== + +Настройки широко используются в Yii при создании новых объектов или при инициализации уже существующих объектов. +Обычно настройки включают в себя названия классов создаваемых объектов и список первоначальных значений +которые должны быть присвоены [свойствам](concept-properties.md) объекта. Также в настройках можно указать список +[обработчиков событий (event handlers)](concept-events.md) объекта, и/или список +[поведений (behaviors)](concept-behaviors.md) объекта. + +Пример настроек подключения к базе данных и дальнейшей инициализации подключения: + +```php +$config = [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', +]; + +$db = Yii::createObject($config); +``` + +Ключ 'class' в настройках указывает на основе какого файла должен создаваться объект. Затем метод [[Yii::createObject()]] +создает объект $db на основе класса указанного в ключе 'class' массива $config. После инициализации объекта будут +использованы оставшиеся параметры настроек для инициализации свойств объекта, обработчиков событий и/или поведений. + +Если вы создали объект, то, используя метод [[Yii::configure()]], вы можете инициализировать свойства этого объекта +с помощью массива, в котором указаны настройки. +Пример: + +```php +Yii::configure($object, $config); +``` + +Обратите внимание, что при таком способе использования настроек массив с настройками не должен содержать ключ 'class' +и его значение. + + +## Формат Настроек + +Формат настроек выглядит следующим образом: + +```php +[ + 'class' => 'ClassName', + 'propertyName' => 'propertyValue', + 'on eventName' => $eventHandler, + 'as behaviorName' => $behaviorConfig, +] +``` + +где + +* Элемент `class` указывает полное имя создаваемого объекта. +* Элементы `propertyName` указывают первоначальные значения свойств создаваемого объекта. Ключи являются именами свойств + создаваемого объекта, а значения ключей - значениями свойств создаваемого объекта. + Таким способом могут быть установлены только публичные переменные объекта и [свойства](concept-properties.md), + созданные через геттеры/сеттеры (getters/setters). +* Элементы `on eventName` указывают какие обработчики должны быть установлены для [событий](concept-events.md) объекта. + Обратите внимание, что ключи массива начинаются с `on `. Чтобы узнать весь список поддерживаемых видов + обработчиков событий обратитесь в раздел [события](concept-events.md) +* Элементы `as behaviorName` указывают какие [поведения](concept-behaviors.md) должны быть установлены для объекта. + Обратите внимание, что ключи массива начинаются с `as `. `$behaviorConfig` это массив для настройки + поведения, этот массив такой же как тот, о котором идет речь. + +Пример настроек с установкой первоначальных значений свойств объекта, с установкой обработчика событий и поведения: + +```php +[ + 'class' => 'app\components\SearchEngine', + 'apiKey' => 'xxxxxxxx', + 'on search' => function ($event) { + Yii::info("Keyword searched: " . $event->keyword); + }, + 'as indexer' => [ + 'class' => 'app\components\IndexerBehavior', + // ... property init values ... + ], +] +``` + + +## Использование Настроек + +Возможность настраивания широко используется в Yii. В самом начале данной главы мы увидели как +создать объект с необходимыми параметрами используя метод [[Yii::createObject()]]. +В данном разделе речь пойдет о настройках приложения и настройках виджетов (widget) - два основных способа +использования настроек. + + +### Настройки Приложения + +Настройки [приложения](structure-applications.md) пожалуй самые сложные из используемых в фреймворке. +Причина в том, что класс [[yii\web\Application|application]] содержит большое количество настраиваемых +свойств и событий. Важно отметить, что свойство приложения, именуемое [[yii\web\Application::components|components]] +может принимать массив из настроек(которые являются массивом) для создания компонентов, регистрируемых на уровне +приложения. +Пример настроек приложения для [простого шаблона приложения (basic application template)](start-basic.md). + +```php +$config = [ + 'id' => 'basic', + 'basePath' => dirname(__DIR__), + 'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), + 'components' => [ + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'mail' => [ + 'class' => 'yii\swiftmailer\Mailer', + ], + 'log' => [ + 'class' => 'yii\log\Dispatcher', + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + ], + ], + ], + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=stay2', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], + ], +]; +``` + +Ключ `class` в данных настройках не указывается. Причина в том, что класс вызывается по полному имени во + [входном скрипте (entry script)](structure-entry-scripts.md): + +```php +(new yii\web\Application($config))->run(); +``` + +Для более подробной документации о том как настроить свойство приложения `components` обратитесь к главам + [Приложения (Applications)](structure-applications.md) и [Service Locator](concept-service-locator.md). + + +### Настройки Виджетов + +При использовании [виджетов](structure-widgets.md) часто возникает необходимость изменить параметры виджета с помощью +настроек. Для создания виджета можно использовать два метода: [[yii\base\Widget::widget()]] и +[[yii\base\Widget::beginWidget()]]. Оба метода принимают настройки в виде массива. +Пример: + +```php +use yii\widgets\Menu; + +echo Menu::widget([ + 'activateItems' => false, + 'items' => [ + ['label' => 'Home', 'url' => ['site/index']], + ['label' => 'Products', 'url' => ['product/index']], + ['label' => 'Login', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest], + ], +]); +``` + +Данный код создает виджет `Menu` и устанавливает параметр виджета `activeItems` в значение false. +Также устанавливается параметр `items`, состоящий из элементов меню. + +Обратите внимание что парамт `class` НЕ передается, т.к. полное имя уже указано. + + +## Файлы Настроек + +Если настройки сложные, то такие настройки, как правило, разделяют по нескольким PHP файлам. Такие файлы называют +*файлами настроек* или *конфигурационными файлами*. Файл настроек возвращает (используя return) массив с настройками. +Например, настройки приложения можно хранить в отдельном файле `web.php`, как показано ниже: + +```php +return [ + 'id' => 'basic', + 'basePath' => dirname(__DIR__), + 'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'), + 'components' => require(__DIR__ . '/components.php'), +]; +``` + +Параметр `components` также имеет сложную конфигурацию, поэтому можно его хранить в файле `components.php` +и подключать в файл `web.php` используя `require` как и показано выше. +Содержимое файла `components.php`: + +```php +return [ + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'mail' => [ + 'class' => 'yii\swiftmailer\Mailer', + ], + 'log' => [ + 'class' => 'yii\log\Dispatcher', + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + ], + ], + ], + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=stay2', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], +]; +``` + +Чтобы получить настройки, хранимые в файле, достаточно подключить файл с помощью `require`. +Пример: + +```php +$config = require('path/to/web.php'); +(new yii\web\Application($config))->run(); +``` + + +## Настройки по умолчанию + +Метод [[Yii::createObject()]] реализован с использованием [dependency injection container](concept-di-container.md). +Это позволяет указывать так называемые *настройки по умолчанию*, которые будут применены ВСЕМ экземплярам классов +во время их инициализации методом [[Yii::createObject()]]. +Настройки по умолчанию указываются с помощью метода `Yii::$container->set()` в разделе [предварительной загрузки (bootstrapping)](runtime-bootstrapping.md). + +Например, если мы хотим изменить виджет [[yii\widgets\LinkPager]] так, чтобы все виджеты данного вида показывали +5 кнопок на странице вместо 10 (как это установлено изначально), то в нашем случае код будет таким: + +```php +\Yii::$container->set('yii\widgets\LinkPager', [ + 'maxButtonCount' => 5, +]); +``` + +Если бы мы не установили настройки по умолчанию, то тогда нам нужно было бы каждый раз при использовании LinkPager +указывать настройки `maxButtonCount`. + + +## Константы Окружения (Environment Constants) + +Настройки могут различаться в зависимости от окружения, в котором происходит запуск приложения. Например, +в среде разработчика(development environment), вы используете базу данных `mydb_dev`, а на продакшн сервере базу данных +`mydb_prod`. Для упрощения смены окружений в Yii существует константа `YII_ENV`. Вы можете указать её во +[входном скрипте (entry script)](structure-entry-scripts.md) своего приложения. +Пример: + +```php +defined('YII_ENV') or define('YII_ENV', 'dev'); +``` + +`YII_ENV` может принимать следующие значения: + +- `prod`: production окружение, т.е. окружение для конечного сервера. Константа `YII_ENV_PROD` установится в значение true. +- `dev`: development окружение, т.е. окружение для разработки. Константа `YII_ENV_DEV` установится в значение true. +- `test`: testing окружение, т.е. окружения для тестирования. Константа `YII_ENV_TEST` установится в значение true. + +По умолчанию константа `YII_ENV`, установлена в значение `prod`. + +Используя эти константы вы можете изменить настройки в соответствии с вашим окружением. +Например, чтобы включить [отладочную панель и отладчик](tool-debugger.md) в development окружении вы можете использовать +следующие настройки приложения: + +```php +$config = [...]; + +if (YII_ENV_DEV) { + // настройки для 'dev' окружения + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = 'yii\debug\Module'; +} + +return $config; +``` diff --git a/docs/guide/concept-configurations.md b/docs/guide/concept-configurations.md index c8717faea6..5d44310c2f 100644 --- a/docs/guide/concept-configurations.md +++ b/docs/guide/concept-configurations.md @@ -58,7 +58,7 @@ where Notice that the array keys are formed by prefixing event names with `on `. Please refer to the [Events](concept-events.md) section for supported event handler formats. * And the `as behaviorName` elements specify what [behaviors](concept-behaviors.md) should be attached to the object. - Notice that the array keys are formed by prefixing behavior names with `on `. `$behaviorConfig` represents + Notice that the array keys are formed by prefixing behavior names with `as `. `$behaviorConfig` represents the configuration for creating a behavior, like a normal configuration as we are describing here. 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 ## Using Configurations -Configurations are used in many places in Yii. At the beginning of this section, we have shown how to use +Configurations are used in many places in Yii. At the beginning of this section, we have shown how to create an object according to a configuration by using [[Yii::createObject()]]. In this subsection, we will describe application configurations and widget configurations - two major usages of configurations.