Config main php yii

Config main php yii

Occasionally one wishes to set systemwide parameters for an application, such as a contact address for email, an application name, or setting an option that guides major behavior. Yii provides for setting of static parameters in the configuration file, and this article talks about how to do it conveniently.

The config file ¶

In protected/config/main.php you’ll find a ‘params’ attribute that can be populated with an array of name/value pairs:

return array( . 'params' => array( 'email' => 'steve@unixwiz.net', 'someOption' => true ) ) 

These options are available at runtime via the Yii::app()->params[. ] hash, which is indexed by the parameter name. And though it’s possible to use it directly, it’s prudent to check parameter existence first with isset() , so this makes it somewhat less convenient.

Our approach is to create a helper function to fetch these by name, with the caller providing a default value in the event the parameter is not set:

// in a helper file function yiiparam($name, $default = null) < if ( isset(Yii::app()->params[$name]) ) return Yii::app()->params[$name]; else return $default; > // in application code $email = yiiparam('email'); // null returned if not defined $someOption = yiiparam('someOption', true); // default to true if param not defined 

This helper function can be placed in a common helper-function file as documented in this helpful wiki article; this is a great way to provide helper functions that your application needs often, but don’t warrant a module, component, or special class.

Читайте также:  Example Domain

Sharing params between configs ¶

Users with console subsystems may well wish to share these parameters between main.php and config.php , and this can be done by creating a shared, common include file:

// in protected/config/_common.inc $commonParams = array( 'email' => 'steve@unixwiz.net', 'someOption' => true ); // in protected/config/main.php require_once('_common.inc'); return array( . 'params' => $commonParams ); // in protected/config/console.php require_once('_common.inc'); return array( . 'params' => $commonParams ); 

Note that this method is for static configuration parameters — it’s doesn’t provide for dynamic parameters changed (or persisted) at runtime, or per-user settings.

Источник

Конфигурации ¶

Конфигурации широко используются в Yii при создании новых объектов или при инициализации уже существующих объектов. Обычно конфигурации включают в себя названия классов создаваемых объектов и список первоначальных значений, которые должны быть присвоены свойствам объекта. Также в конфигурациях можно указать список обработчиков событий объекта и/или список поведений объекта.

Пример конфигурации подключения к базе данных и дальнейшей инициализации подключения:

$config = [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ]; $db = Yii::createObject($config); 

Метод Yii::createObject() принимает в качестве аргумента массив с конфигурацией и создаёт объект указанного в них класса. При этом оставшаяся часть конфигурации используется для инициализации свойств, обработчиков событий и поведений объекта.

Если объект уже создан, вы можете использовать Yii::configure() для того, чтобы инициализировать свойства объекта массивом с конфигурацией:

Yii::configure($object, $config); 

Обратите внимание, что в этом случае массив с конфигурацией не должен содержать ключ class .

Формат конфигурации ¶

Формат конфигурации выглядит следующим образом:

[ 'class' => 'ClassName', 'propertyName' => 'propertyValue', 'on eventName' => $eventHandler, 'as behaviorName' => $behaviorConfig, ] 
  • Элемент class указывает абсолютное имя класса создаваемого объекта.
  • Элементы propertyName указывают первоначальные значения свойств создаваемого объекта. Ключи являются именами свойств создаваемого объекта, а значения — начальными значениями свойств создаваемого объекта. Таким способом могут быть установлены только публичные переменные объекта и его свойства, созданные через геттеры и сеттеры.
  • Элементы on eventName указывают на то, какие обработчики должны быть прикреплены к событиям объекта. Обратите внимание, что ключи массива начинаются с on . Чтобы узнать весь список поддерживаемых видов обработчиков событий, обратитесь в раздел события
  • Элементы as behaviorName указывают на то, какие поведения должны быть внедрены в объект. Обратите внимание, что ключи массива начинаются с as ; а $behaviorConfig представляет собой конфигурацию для создания поведения, похожую на все остальные конфигурации.

Пример конфигурации с установкой первоначальных значений свойств объекта, обработчика событий и поведения:

[ 'class' => 'app\components\SearchEngine', 'apiKey' => 'xxxxxxxx', 'on search' => function ($event) < Yii::info("Keyword searched: " . $event->keyword); >, 'as indexer' => [ 'class' => 'app\components\IndexerBehavior', // . начальные значения свойств . ], ] 

Использование конфигурации ¶

Конфигурации повсеместно используются в Yii. В самом начале данной главы мы узнали как создать объект с необходимыми параметрами, используя метод Yii::createObject(). В данном разделе речь пойдет о конфигурации приложения и конфигурациях виджетов — двух основных способов использования конфигурации.

Конфигурация приложения ¶

Конфигурация приложения, пожалуй, самая сложная из используемых в фреймворке. Причина в том, что класс application содержит большое количество конфигурируемых свойств и событий. Более того, свойство приложения components может принимать массив с конфигурацией для создания компонентов, регистрируемых на уровне приложения. Пример конфигурации приложения для шаблона приложения basic.

$config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', 'components' => [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'mailer' => [ '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 в данной конфигурации не указывается. Причина в том, что класс вызывается по полному имени во входном скрипте:

(new yii\web\Application($config))->run(); 

За более подробной документацией о настройках свойства components в конфигурации приложения обратитесь к главам приложения и Service Locator.

Начиная с версии 2.0.11, можно настраивать контейнер зависимостей через конфигурацию приложения. Для этого используется свойство container :

$config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', 'container' => [ 'definitions' => [ 'yii\widgets\LinkPager' => ['maxButtonCount' => 5] ], 'singletons' => [ // Конфигурация для единожды создающихся объектов ] ] ]; 

Чтобы узнать о возможных значениях definitions и singletons , а также о реальных примерах использования, прочитайте подраздел Более сложное практическое применение раздела Контейнер внедрения зависимостей.

Конфигурации виджетов ¶

При использовании виджетов часто возникает необходимость изменить параметры виджета с помощью конфигурации. Для создания виджета можно использовать два метода: yii\base\Widget::widget() и yii\base\Widget::begin(). Оба метода принимают конфигурацию в виде 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-файлам. Такие файлы называют конфигурационными файлами. Конфигурационный файл возвращает массив PHP, являющийся конфигурацией. Например, конфигурацию приложения можно хранить в отдельном файле web.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 :

return [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'mailer' => [ '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 :

$config = require 'path/to/web.php'; (new yii\web\Application($config))->run(); 

Значения конфигурации по умолчанию ¶

Метод Yii::createObject() реализован с использованием контейнера внедрения зависимостей. Это позволяет задавать так называемые значения конфигурации по умолчанию, которые будут применены ко ВСЕМ экземплярам классов во время их инициализации методом Yii::createObject(). Значения конфигурации по умолчанию указываются с помощью метода Yii::$container->set() на этапе предварительной загрузки.

Например, если мы хотим изменить виджет yii\widgets\LinkPager так, чтобы все виджеты данного вида показывали максимум 5 кнопок на странице вместо 10 (как это установлено изначально), можно использовать следующий код:

\Yii::$container->set('yii\widgets\LinkPager', [ 'maxButtonCount' => 5, ]); 

Без использования значений конфигурации по умолчанию, при использовании LinkPager, вам пришлось бы каждый раз задавать значение maxButtonCount .

Константы окружения ¶

Конфигурации могут различаться в зависимости от режима, в котором происходит запуск приложения. Например, в окружении разработчика (development) вы используете базу данных mydb_dev , а в эксплуатационном (production) окружении базу данных mydb_prod . Для упрощения смены окружений в Yii существует константа YII_ENV . Вы можете указать её во входном скрипте своего приложения:

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 .

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

$config = [. ]; if (YII_ENV_DEV) < // значения параметров конфигурации для окружения разработки 'dev' $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module'; > return $config; 

Источник

Оцените статью