A maioria dos componentes do Zend Framework que são usados em seu site, requer configuração (pequenos ajustes). Por exemplo, na configuração arquivo que você define credenciais de acesso a conexão com o banco de dados, ou quando especifica quais módulos estão presentes em seu aplicativo e, fornecem alguns parâmetros específicos para sua aplicação.
Você pode definir os parâmetros de configuração em dois níveis: no nível de aplicação, ou no nível do módulo. No nível do aplicativo, você normalmente definir parâmetros que controlam o aplicativo inteiro e são comuns a todos módulos de sua aplicação. No nível do módulo, você define parâmetros que afeta apenas este módulo.
Você pode definir os parâmetros de configuração em dois níveis: no nível da aplicação, ou no nível do módulo. No nível da aplicativo, você normalmente definir parâmetros que controlam o aplicativo inteiro e são comuns a todos módulos de sua aplicação. No nível do módulo, você define parâmetros que afeta apenas este módulo.
Alguns frameworks PHP preferem aplicar o conceito convenções sobre configuração, onde A maioria dos seus parâmetros é codificada e pre-configurados e não requer configuração. Isso torna mais rápido desenvolver o aplicativo, mas o torna menos personalizável. No Zend Framework 3, o conceito convenções sobre configuração é usado, porém você pode personalizar qualquer aspecto de sua aplicação, mas terá que gastar algum tempo para aprender como fazer isso.
O subdiretório APP_DIR/config contém arquivos de configuração de toda a sua aplicação. Vamos ver mais detalhes (Imagem 3.4).
O APP_DIR/config/application.config.php é o arquivo de configuração principal. Ele é usado pela aplicação na na inicialização para determinar quais módulos do aplicativo devem ser carregados e quais serviços criar por padrão.
Abaixo, o conteúdo do arquivo application.config.php é mostrado. Você pode ver que o arquivo de configuração é apenas um array associativo em PHP e cada componente tem uma chave específica nessa matriz. Você pode fornecer comentários in-line para as chaves do array para tornar mais fácil para os outros entenderem o significado de cada chave.
Por convenção, os nomes das chaves dos arrays devem estar em minúsculas, e se o nome da chave consiste em palavras, as palavras devem ser separadas pelo símbolo de sublinhado ('_').
return [
// Retrieve list of modules used in this application.
'modules' => require __DIR__ . '/modules.config.php',
// These are various options for the listeners attached to the ModuleManager
'module_listener_options' => [
// This should be an array of paths in which modules reside.
// If a string key is provided, the listener will consider that a module
// namespace, the value of that key the specific path to that module's
// Module class.
'module_paths' => [
'./module',
'./vendor',
],
// An array of paths from which to glob configuration files after
// modules are loaded. These effectively override configuration
// provided by modules themselves. Paths may use GLOB_BRACE notation.
'config_glob_paths' => [
realpath(__DIR__) . '/autoload/{{,*.}global,{,*.}local}.php',
],
// Whether or not to enable a configuration cache.
// If enabled, the merged configuration will be cached and used in
// subsequent requests.
'config_cache_enabled' => true,
// The key used to create the configuration cache file name.
'config_cache_key' => 'application.config.cache',
// Whether or not to enable a module class map cache.
// If enabled, creates a module class map cache which will be used
// by in future requests, to reduce the autoloading process.
'module_map_cache_enabled' => true,
// The key used to create the class map cache file name.
'module_map_cache_key' => 'application.module.cache',
// The path in which to cache merged configuration.
'cache_dir' => 'data/cache/',
// Whether or not to enable modules dependency checking.
// Enabled by default, prevents usage of modules that depend on other modules
// that weren't loaded.
// 'check_dependencies' => true,
],
// Used to create an own service manager. May contain one or more child arrays.
//'service_listener_options' => [
// [
// 'service_manager' => $stringServiceManagerName,
// 'config_key' => $stringConfigKey,
// 'interface' => $stringOptionalInterface,
// 'method' => $stringRequiredMethodName,
// ],
// ],
// Initial configuration with which to seed the ServiceManager.
// Should be compatible with Zend\ServiceManager\Config.
// 'service_manager' => [],
];
Na linha 3, temos os módulos sendo definindo quais módulos serão carregados na inicialização da aplicação.
Você pode ver isso os nomes dos módulos são armazenados dentro de outro arquivo de configuração modules.config.php
,
que lista todos os módulos presente no seu site.
Na linha 11, temos o module_paths
que informa ao ZF3 sobre
diretórios onde procurar pelo os arquivos de origem pertencentes a módulos. Os módulos da sua aplicação
que você desenvolver estão localizados no diretório APP_DIR/module e os que você adquirir atavés do Composer
provavelmente vão estar localizados dentro do diretório APP_DIR/vendor.
E na linha 19 nós temos o config_glob_paths
, que diz ao ZF3 onde
procure por arquivos extras de configuração. Você vê esses arquivos de APP_DIR/config/autoload
que têm o sufixo global.php ou local.php, são automaticamente carregados.
Resumindo, você normalmente usa o arquivo application.config.php para armazenar as informações
sobre quais módulos devem ser carregados na sua aplicação e onde eles estão localizados e
como eles são carregados (por exemplo, você pode controlar as opções de cache aqui). Nesse
arquivo você também pode ajustar o service manager. Não é recomendado adicionar mais
chaves neste arquivo. Para isso, é melhor usar o arquivo autoload/global.php
.
E vamos também dar uma olhada dentro do arquivo modules.config.php
. Atualmente, você tem os seguintes módulos
instalado em seu site:
return [
'Zend\Session',
'Zend\Mvc\Plugin\Prg',
'Zend\Mvc\Plugin\Identity',
'Zend\Mvc\Plugin\FlashMessenger',
'Zend\Mvc\Plugin\FilePrg',
'Zend\Form',
'Zend\Router',
'Zend\Validator',
'Application',
];
O módulo Application
contém o módulo do arquivos do seu aplicativo.
Todos os outros módulos são listados como componentes do Zend Framework.
No ZF3, existe um um plugin especial do Composer chamado component installer. Se você se lembra, no capítulo Zend Skeleton Application, nós respondemos várias perguntas sim/não do instalador, determinando quais componentes instalar. E o instalador injetou os nomes dos módulos desses componentes no
modules.config.php
Arquivos de configuração "extra", APP_DIR/config/autoload/global.php e APP_DIR/config/autoload/local.php Os arquivos definem parâmetros dependentes de ambiente e dependentes do ambiente em todo o aplicativo, respectivamente. Esses arquivos de configuração são automaticamente carregados e mesclados recursivamente com os arquivos de configuração fornecidos pelo módulo, é por isso que seu diretório é chamado autoload.
Tendo diferentes arquivos de configuração no diretório APP_DIR/config/autoload, você pode estar confuso sobre quais parâmetros devem ser colocados em cada um. Aqui estão algumas dicas:
Você usa o arquivo autoload/global.php para armazenar parâmetros que não dependem no ambiente da máquina. Por exemplo, aqui você pode armazenar parâmetros que substituir os parâmetros padrão de algum módulo. Não armazene informações confidenciais (como credenciais de banco de dados) aqui, para isso é melhor usar autoload/local.php
Você usa o arquivo autoload/local.php para armazenar parâmetros específicos para o
ambiente desenvolvimento. Por exemplo, aqui você pode armazenar suas credenciais de banco de dados.
Cada desenvolvedor geralmente possui um banco de dados local ao desenvolver e testar o site.
O desenvolvedor irá editar o arquivo local.php e inserir suas próprias credenciais de banco de dados aqui.
Quando você instala seu site no servidor de produção, você edita o arquivo local.php
e digita
as credenciais para o banco de dados aqui.
Porque o arquivo autoload/local.php contém parâmetros específicos do ambiente, no sistema de controle de versão você armazena seu "modelo de distribuição" local.php.dist. Cada desenvolvedor em sua equipe renomeia o arquivo local.php.dist para local.php e informa em seus próprios parâmetros. Este arquivo local.php não deve ser armazenado em Controle de versão (GIT), porque ele pode conter informações confidenciais, como credenciais de banco de dados (nome de usuário e senha), e você pode querer que outras pessoas não os vejam.
O arquivo de configuração de desenvolvimento em nível da aplicativo (APP_DIR/config/development.config.php
) apenas é usado
quando você ativa o modo de desenvolvimento. Se você lembrar, ativamos o modo de desenvolvimento
anteriormente no capítulo Zend Skeleton Application.
Você ativa o modo de desenvolvimento com o seguinte comando:
php composer.phar development-enable
O arquivo development.config.php
é incorporado com o arquivo application.config.php
.
Isso permite que você substituir alguns parâmetros. Por exemplo, você pode:
Se você desabilitar o modo de desenvolvimento, o arquivo development.config.php
será apagado. Então você não deve
armazenar este arquivo sob o controle de versão. Em vez disso, armazene sua versão distribution, development.config.php.dist
no seu controle de versão.
O arquivo de configuração de desenvolvimento extra no nível de aplicação (APP_DIR/config/autoload/development.local.php
) apresenta apenas
quando você ativa o modo de desenvolvimento.
O arquivo development.local.php
é incorporado com outros arquivos de configuração. Isso permite que você
Substituir alguns parâmetros específicos do módulo usados apenas no ambiente de desenvolvimento.
Se você desabilitar o modo de desenvolvimento, o arquivo development.local.php
será apagado. Então você não deveria
armazene este arquivo sob o controle de versão. Em vez disso, armazene sua versão distribution, development.local.php.dist
no controle de versão.
Na imagem 3.4, você pode ver que o módulo Application é enviado com seu aplicativo
tem o arquivo module.config.php, no qual você coloca seus parâmetros específicos do módulo. Vamos
veja o arquivo module.config.php
do módulo Application
:
<?php
namespace Application;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;
return [
'router' => [
'routes' => [
'home' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
'application' => [
'type' => Segment::class,
'options' => [
'route' => '/application[/:action]',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class,
],
],
'view_manager' => [
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => [
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
],
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
Neste arquivo, você registra os module's controllers, coloca informações sobre regras de rotas para mapear URLs para seus controllers, registrar plugins dos controllers e também registrar as views e os views helpers (aprenderemos mais sobre esses termos neste capítulo e nos próximos capítulos).
Quando uma aplicação está sendo criada, arquivos de configuração fornecidos pelo módulo O diretório APP_DIR/config/autoload está sendo incorporado em uma grande array, Assim, cada parâmetro de configuração fica disponível para qualquer parte do site. Então, potencialmente, você pode substituir alguns parâmetros especificados pelos módulos.
Você também pode ter visto o arquivo de configuração "combinado" ao instalar o PHP, onde existe o arquivo principal php.ini e vários arquivos extras de configuração, que são incluídos no arquivo principal. Essa separação torna a configuração da sua aplicação mais refinada e flexível, porque você não precisa colocar todos os seus parâmetros em um único arquivo e editá-lo toda vez que precisar que necessitar mudar alguma coisa.
Os arquivos de configuração são carregados na seguinte ordem:
O principal arquivo o application.config.php é carregado primeiro. É usado para inicializar o service manager e carregar os módulos da aplicação. Os dados carregados desta configuração é armazenado sozinho e não são incorporados com outros arquivos de configuração.
Arquivos de configuração para cada módulo de aplicativo são carregados e incorporados. Módulos são carregados na mesma ordem em que estão listados no arquivo application.config.php. Se dois módulos armazenam (intencionalmente ou por engano) parâmetros no chaves de nome similar, esses parâmetros podem ser sobrescritos.
Arquivos de configuração extra do APP_DIR/config/autoload são carregados e mesclados em um array único. Em seguida, essa array é incorporado com o module config com array que foi produzido anteriormente ao carregar a configuração do módulo. A configuração de todo o aplicativo prioridade mais alta que a configuração do módulo, então você pode sobrescrever as chaves do módulo aqui, se você desejar.