Configurações
As configurações são amplamente utilizadas em Yii na criação de novos objetos ou inicializando objetos existentes. Configurações geralmente incluem o nome da classe do objeto que está sendo criado, e uma lista de valores iniciais que devem ser atribuídos as propriedades do objeto. Configurações também podem incluir uma lista de manipuladores que devem ser anexados aos eventos do objeto e/ou uma lista de behaviors que também deve ser ligado ao objeto.
A seguir, uma configuração é usada para criar e inicializar uma conexão com o banco:
$config = [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=demo', 'username' => 'root', 'password' => '', 'charset' => 'utf8',];
$db = Yii::createObject($config);O método [[Yii::createObject()]] recebe um array de configuração como argumento, e cria um objeto instanciando a classe informada na configuração. Quando o objeto é instanciado, o resto da configuração será usada para inicializar as propriedades, manipuladores de eventos, e behaviors do objeto.
Se você já tem um objeto, você pode utilizar [[Yii::configure()]] para inicializar as propriedades do objeto com o array de configuração:
Yii::configure($object, $config);Note que, neste caso, o array de configuração não deve conter o elemento class.
Formato da Configuração
Seção intitulada “Formato da Configuração ”O formato de uma configuração pode ser descrita formalmente como:
[ 'class' => 'ClassName', 'propertyName' => 'propertyValue', 'on eventName' => $eventHandler, 'as behaviorName' => $behaviorConfig,]Onde:
- O elemento
classdetermina um nome de classe totalmente qualificado para o objeto que está sendo criado. - O elemento
propertyNamedetermina os valores iniciais para a propriedade nomeada. As chaves são os nomes das propriedades e os valores são os valores iniciais correspondentes. Apenas variáveis públicas e propriedades definidas por getters/setters podem ser configuradas. - O elemento
on eventNamedetermina quais manipuladores devem ser anexados aos eventos do objeto. Observe que as chaves do array são formadas prefixando a palavraonao nome do evento. Por favor, consulte a seção Eventos para formatos de manipulador de eventos suportados. - O elemento
as behaviorNamedetermina quais behaviors devem ser anexados ao objeto. Observe que as chaves do array são formadas prefixando a palavraasao nome do behavior; O valor,$behaviorConfig, representa a configuração para a criação do behavior, como uma configuração normal descrita aqui.
Abaixo está um exemplo mostrando uma configuração com valores iniciais de propriedades, manipulador de evento e behaviors:
[ '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 ... ],]Usando Configurações
Seção intitulada “Usando Configurações ”Configurações são utilizadas em vários lugares no Yii. No início desta seção, mostramos como criar um objeto utilizando configuração [[Yii::createObject()]]. Nesta subseção, nós descreveremos a configuração de aplicação e configuração de widget - dois principais usos de configurações.
Configurações da Aplicação
Seção intitulada “Configurações da Aplicação ”A configuração de uma aplicação é provavelmente um dos mais complexos arrays no Yii. Isto porque a classe [[yii\web\Application|application]] tem muitas propriedades e eventos configuráveis. Mais importante, suas propriedades [[yii\web\Application::components|components]] podem receber um array de configuração para a criação de componentes que são registrados através da aplicação. O exemplo abaixo é um resumo do arquivo de configuração da aplicação para o Template Básico de Projetos.
$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', ], ],];A configuração não tem uma chave class. Isto porque ele é utilizado como um script de entrada, onde o nome da classe já está informado,
(new yii\web\Application($config))->run();Mais detalhes sobre a configuração das propriedades componentes de uma aplicação podem ser encontrados na seção Aplicações e na seção Service Locator.
Configurações de Widget
Seção intitulada “Configurações de Widget ”Ao utilizar osos widgets, muitas vezes você precisa usar configurações para customizar as propriedades do widget. Ambos os métodos [[yii\base\Widget::widget()]] e [[yii\base\Widget::begin()]] podem ser utilizados para criar um widget. Eles precisam de um array de configuração, como o exemplo abaixo,
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], ],]);O código acima cria um widget Menu e inicializa suas propriedades activateItems com false. A propriedade items também é configurada com os itens do menu para serem exibidos.
Observe que, como o nome da classe já está dado, o array de configuração não precisa da chave class.
Arquivos de Configuração
Seção intitulada “Arquivos de Configuração ”Quando uma configuração é muito complexa, uma prática comum é armazená-la em um ou mais arquivos PHP, conhecidos como arquivos de configuração. Um arquivo de configuração retorna um array PHP representando a configuração.
Por exemplo, você pode guardar uma configuração da aplicação em um arquivo chamado web.php, como a seguir,
return [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', 'components' => require __DIR__ . '/components.php',];Como a configuração de componentes é muito complexa, você o guarda em um arquivo separado chamado components.php e faz um “require” deste arquivo no web.php como mostrado acima. o conteúdo de components.php é como abaixo,
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', ],];Para pegar a configuração armazenada em um arquivo de configuração, simplismente faça um “require” deste arquivo, como o exemplo abaixo:
$config = require 'path/to/web.php';(new yii\web\Application($config))->run();Configurações Padrões
Seção intitulada “Configurações Padrões ”O método [[Yii::createObject()]] é implementado com base em um container de injeção de dependência.
Ele permite que você especifique um conjunto do chamado configurações padrões que será aplicado a todas as instâncias das classes especificadas quando elas forem criadas usando [[Yii::createObject()]]. As configurações padrões podem ser especificadas executando Yii::$container->set() na inicialização (bootstrapping) do código.
Por exemplo, se você quiser personalizar [[yii\widgets\LinkPager]] de modo que todas as páginas mostrarão no máximo 5 botões (o valor padrão é 10), você pode utilizar o código abaixo para atingir esse objetivo,
\Yii::$container->set('yii\widgets\LinkPager', [ 'maxButtonCount' => 5,]);Sem usar as configurações padrão, você teria que configurar maxButtonCount em todos os lugares que utilizassem este recurso.
Constantes de Ambiente
Seção intitulada “Constantes de Ambiente ”Configurações frequentemente variam de acordo com o ambiente no qual a aplicação é executada. Por exemplo, no ambiente de desenvolvimento, você pode querer usar um banco de dados chamado mydb_dev, enquanto no servidor de produção você pode querer usar o banco de dados mydb_prod. Para facilitar a troca de ambientes, o Yii fornece uma constante chamada YII_ENV que você pode definir no script de entrada da sua aplicação.
Por exemplo,
defined('YII_ENV') or define('YII_ENV', 'dev');você pode definir YII_ENV como um dos seguintes valores:
prod: ambiente de produção. A constanteYII_ENV_PRODserá avaliada como verdadeira. Este é o valor padrão da constanteYII_ENVcaso você não a defina.dev: ambiente de desenvolvimento. A constanteYII_ENV_DEVserá avaliada como verdadeira.test: ambiente de teste. A constanteYII_ENV_TESTserá avaliada como verdadeira.
Com estas constantes de ambientes, você pode especificar suas configurações de acordo com o ambiente atual. Por exemplo, sua configuração da aplicação pode conter o seguinte código para habilitar a barra de ferramentas de depuração e depurador no ambiente de desenvolvimento.
$config = [...];
if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module';}
return $config;