# Componentes de Aplicação ¶

Aplicações são service locators. Elas hospedam um conjunto de assim chamados componentes de aplicação que fornecem diferentes serviços para o processamento de requisições. Por exemplo, o componente `urlManager` é responsável pelo roteamento de requisições Web aos controllers adequados; o componente `db` fornece serviços relacionados a bancos de dados; e assim por diante.

Cada componente de aplicação tem um ID que o identifica de maneira única dentre os outros componentes de uma mesma aplicação. Você pode acessar um componente de aplicação através da expressão

    \Yii::$app->componentID

Por exemplo, você pode usar `\Yii::$app->db` para obter a conexão do BD, e `\Yii::$app->cache` para obter o cache primário registrado com a aplicação.

Um componente de aplicação é criado na primeira vez em que é acessado através da expressão acima. Quaisquer acessos posteriores retornarão a mesma instância do componente.

Componentes de aplicação podem ser quaisquer objetos. Você pode registrá-los configurando a propriedade yii\base\Application::$components nas configurações da aplicação. Por exemplo,

    [
        'components' => [
            // registra o componente "cache" usando um nome de classe
            'cache' => 'yii\caching\ApcCache',

            // registra o componente "db" usando um array de configuração
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=demo',
                'username' => 'root',
                'password' => '',
            ],

            // registra o componente "search" usando uma função anônima
            'search' => function () {
                return new app\components\SolrService;
            },
        ],
    ]

> Informação: Embora você possa registrar quantos componentes de aplicação você quiser, você deveria fazer isso com juízo. Componentes de aplicação são como variáveis globais. Usar componentes de aplicação demais pode tornar seu código potencialmente mais difícil de testar e manter. Em muitos casos, você pode simplesmente criar um componente local e utilizá-lo quando necessário.

## Components de Inicialização ¶

Conforme mencionado acima, um componente de aplicação só será instanciado quando ele estiver sendo acessado pela primeira vez. Se ele nunca for acessado durante uma requisição, ele não será instanciado. No entanto, algumas vezes você pode querer instanciar um componente de aplicação em todas as requisições, mesmo que ele não seja explicitamente acessado. Para fazê-lo, você pode listar seu ID na propriedade bootstrap da aplicação.

Por exemplo, a configuração de aplicação a seguir assegura-se que o componente `log` sempre esteja carregado:

    [
        'bootstrap' => [
            'log',
        ],
        'components' => [
            'log' => [
                // configuração para o componente "log"
            ],
        ],
    ]

## Componentes de Aplicação do Core ¶

O yii define um conjunto de componentes de aplicação do core com IDs fixos e configurações padrão. Por exemplo, o componente request é usado para coletar as informações sobre uma requisição do usuário e resolvê-la em uma rota; o componente db representa uma conexão do banco de dados através da qual você pode realizar consultas. É com a ajuda destes componentes de aplicação do core que as aplicações Yii conseguem tratar as requisições dos usuários.

Segue abaixo uma lista dos componentes de aplicação pré-definidos do core. Você pode configurá-los e personalizá-los como você faz com componentes de aplicação normais. Quando você estiver configurando um componente de aplicação do core, se você não especificar sua classe, a padrão será utilizada.

- assetManager: gerencia os asset bundles e a publicação de assets. Por favor consulte a seção Gerenciando Assets para mais detalhes.
- db: representa uma conexão do banco de dados através da qual você poderá realizar consultas. Perceba que quando você configura esse componente, você precisa especificar a classe do componente bem como as outras propriedades obrigatórios, tais como yii\db\Connection::$dsn. Por favor consulte a seção Data Access Objects (Objeto de Acesso a Dados) para mais detalhes.
- errorHandler: manipula erros e exceções do PHP. Por favor consulte a seção Tratamento de Erros para mais detalhes.
- formatter: formata dados quando são exibidos aos usuários finais. Por exemplo, um número pode ser exibido com um separador de milhares, uma data pode ser formatada em um formato longo. Por favor consulte a seção Formatação de Dados para mais detalhes.
- i18n: suporta a tradução e formatação de mensagens. Por favor consulte a seção Internacionalização para mais detalhes.
- log: gerencia alvos de logs. Por favor consulte a seção Gerenciamento de Logs para mais detalhes.
- mail: suporta a composição e envio de e-mails. Por favor consulte a seção Enviando E-mails para mais detalhes.
- response: representa a resposta sendo enviada para os usuários finais. Por favor consulte a seção Respostas para mais detalhes.
- request: representa a requisição recebida dos usuários finais. Por favor consulte a seção Requisições para mais detalhes.
- session: representa as informações da sessão. Esse componente só está disponível em aplicações Web. Por favor consulte a seção Sessões e Cookies para mais detalhes.
- urlManager: suporta a análise e criação de URLs. Por favor consulte a seção Análise e Geração de URLs para mais detalhes.
- user: representa as informações de autenticação do usuário. Esse componente só está disponível em aplicações Web. Por favor consulte a seção Autenticação para mais detalhes.
- view: suporta a renderização de views. Por favor consulte a seção Views para mais detalhes.