Visão geral
O código de aplicações Yii normalmente é agrupado em módulos por contexto. Dentro de cada módulo, pode haver um agrupamento por tipo.
Por exemplo, se a aplicação for uma loja online, os contextos poderiam ser:
- Cliente
- Perfil
- Lista de produtos
- Checkout
- Logística
- Entrega
- Endereços
- Helpdesk
- Suporte
- Reclamações
- Devoluções
- Contabilidade
- Devoluções
- Transações
- Impostos
Para um contexto "Customer", localizado no namespace App\Customer, a estrutura seria:
App/
Customer/ <-- namespace do módulo
Entity/
Customer.php <-- entidade compartilhada por "Profile" e "Checkout"
Profile/
Widget/
Gravatar.php
ProfileRepository.php <-- o repositório geralmente é específico do contexto
ProfileController.php <-- ponto de entrada de "Customer\Profile"
ProductList/ <-- namespace do módulo
Entity/ <-- entidades específicas de "Customer\ProductList"
Category.php
Product.php
ProductsListController.php <-- ponto de entrada de "Customer\ProductList"
Checkout/ <-- namespace do módulo
CheckoutController.phpUm contexto pode incluir subcontextos. Se uma classe é compartilhada por vários contextos, ela é movida para o ancestral comum desses contextos.
Um contexto pode ter um ponto de entrada conhecido como "action" ou "controller". A função dele é receber uma instância de requisição, passá-la para a camada de domínio em um formato adequado e criar uma resposta com base no retorno da camada de domínio.
Além disso, aplicações Yii também têm o seguinte:
- scripts de entrada: são scripts PHP acessíveis diretamente pelos usuários finais. Eles são responsáveis por iniciar um ciclo de tratamento de requisição. Normalmente, um único script de entrada atende a aplicação inteira.
- serviços: normalmente são objetos sem estado registrados no container de dependências que fornecem diversos métodos de ação.
- middleware: representam código que precisa ser executado antes e depois do tratamento efetivo de cada requisição pelos handlers de action.