Como carregar o arquivo de configuração

Os componentes individuais da Nette são configurados usando arquivos de configuração. Mostraremos como carregar esses arquivos.

Se você estiver usando toda a estrutura, não há necessidade de fazer mais nada. No projeto, você tem um diretório pré-preparado config/ para os arquivos de configuração, e o carregador de aplicativos é responsável por carregá-los. Este artigo é para usuários que utilizam apenas uma biblioteca Nette e querem tirar proveito dos arquivos de configuração.

Os arquivos de configuração são geralmente escritos em NEON e são melhor editados em editores com suporte para isso. Eles podem ser considerados como instruções sobre como criar e configurar objetos. Assim, o resultado do carregamento de uma configuração será uma chamada fábrica, que é um objeto que, sob demanda, criará outros objetos que você deseja usar. Por exemplo, uma conexão de banco de dados, etc.

Esta fábrica também é chamada de container de injeção de dependência (Recipiente DI) e se você estiver interessado nos detalhes, leia o capítulo sobre injeção de dependência.

O carregamento da configuração e a criação do container é feita pela classe Nette\Bootstrap\Configurator, portanto, instalaremos primeiro seu pacote nette/bootstrap:

composer require nette/bootstrap

E crie uma instância da classe Configurator. Como o recipiente DI gerado será colocado em cache no disco, você precisa definir o caminho para o diretório onde ele será salvo:

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

No Linux ou macOS, defina as permissões de escrita para o diretório temp/.

E nós mesmos chegamos aos arquivos de configuração. Estes são carregados usando addConfig():

$configurator->addConfig(__DIR__ . '/database.neon');

Se você quiser adicionar mais arquivos de configuração, você pode chamar a função addConfig() várias vezes. Se elementos com as mesmas chaves aparecerem nos arquivos, eles serão sobregravados (ou fundidos no caso de arrays). Um arquivo inserido posteriormente tem uma prioridade maior do que o anterior.

O último passo é a criação de um recipiente DI:

$container = $configurator->createContainer();

E já criará os objetos desejados para nós. Por exemplo, se você estiver usando a configuração para o Nette Database, você pode solicitar a ele que crie conexões de banco de dados:

$db = $container->getByType(Nette\Database\Connection::classe);
// ou
$explorer = $container->getByType(Nette\Database\Explorer::class);
// ou ao criar múltiplas conexões
$db = $container->getByName('database.main.connection');

E agora você pode trabalhar com o banco de dados!

Desenvolvimento vs Modo de Produção

No modo de desenvolvimento, o recipiente é atualizado automaticamente sempre que os arquivos de configuração são alterados. No modo de produção, ele é gerado apenas uma vez e as mudanças não são verificadas. Assim, o modo de desenvolvimento é voltado para a máxima conveniência do programador, o modo de produção é voltado para o desempenho.

A seleção do modo é feita por autodetecção, de modo que normalmente não há necessidade de configurar ou trocar manualmente nada. O modo é desenvolvido quando a aplicação está sendo executada em um host local (ou seja, o endereço IP 127.0.0.1 ou ::1) e não há nenhum proxy (ou seja, seu cabeçalho HTTP). Caso contrário, ele é executado em modo de produção.

Se você quiser habilitar o modo de desenvolvimento em outros casos, como programadores acessando de um endereço IP específico, use setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// um conjunto de endereços IP também pode ser especificado

Definitivamente, recomendamos combinar o endereço IP com um cookie. Armazene um token secreto, por exemplo secret1234, no cookie nette-debug, e desta forma você habilita o modo de desenvolvimento para programadores acessando de um endereço IP específico e também tendo o token mencionado no cookie:

$configurator->setDebugMode('secret1234@23.75.345.200');

Você também pode desativar o modo desenvolvedor por completo, mesmo para o localhost:

$configurator->setDebugMode(false);

Parâmetros

Você também pode usar parâmetros em arquivos de configuração, que são definidos na seção parameters.

Eles também podem ser inseridos de fora usando o método addDynamicParameters():

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

O parâmetro projectId pode ser referenciado na configuração com a notação %projectId%.

versão: 3.x