Laravel para Nível Pleno
Compartilhado por um usuário do Flashcards.gg · gerado com IA · Denunciar este conjunto
Conceitos avançados e arquitetura do framework Laravel para desenvolvedores em nível pleno.
Toque no cartão para virar
Cartões · 50
- Ciclo de Vida da Requisição (Request Lifecycle)
- Entra por public/index.php, carrega o Composer, instancia a aplicação em bootstrap/app.php e encaminha a requisição via HTTP Kernel através do pipeline de middlewares até a rota ou controller.
- Service Container
- Contêiner de Injeção de Dependências (IoC) que gerencia a instanciação e resolução de classes, eliminando o acoplamento direto via Dependency Injection automática e Reflection.
- Service Providers
- Ponto central de inicialização da aplicação; configuram bindings no container no método register() e executam lógica após todos os serviços estarem prontos no método boot().
- Diferença entre bind() e singleton()
- bind() instancia um novo objeto a cada resolução no container, enquanto singleton() resolve a dependência uma única vez e reutiliza a mesma instância nas chamadas subsequentes.
- Facades
- Classes que oferecem uma interface estática para serviços registrados no Service Container, usando internamente o método mágico __callStatic() apontado por getFacadeAccessor().
- Estrutura do bootstrap/app.php no Laravel moderno
- Configura a aplicação de forma fluente, unificando o registro de rotas (withRouting), middlewares globais/grupos (withMiddleware) e tratamento centralizado de exceções (withExceptions).
- Middleware
- Camada intermediária que inspeciona e filtra requisições HTTP antes de chegarem ao controller ou manipula a resposta final antes de ser enviada ao cliente via padrão Pipeline.
- Middleware Terminable
- Middleware que implementa o método terminate(), executado após a resposta HTTP já ter sido enviada ao navegador, ideal para logs pesados ou tarefas pós-envio.
- Route Model Binding Implícito
- Injeção automática do model Eloquent correspondente ao parâmetro da rota baseado no nome da variável e na chave primária (ou campo customizado definido na rota).
- Route Model Binding Explícito
- Mapeamento manual de um parâmetro de rota para uma classe ou query específica, registrado via Route::model() ou Route::bind() geralmente dentro do boot da aplicação.
- Form Request Validation
- Classe dedicada que encapsula a lógica de autorização (authorize) e regras de validação (rules) de uma requisição HTTP, desacoplando o controller dessa responsabilidade.
- Custom Validation Rules
- Objetos que implementam a interface ValidationRule com o método validate(), permitindo regras de validação complexas, reutilizáveis e com tradução de erros.
- Eloquent Active Record
- Padrão de arquitetura onde cada model representa uma tabela e sua instância representa uma linha, contendo tanto o acesso aos dados quanto a lógica de persistência e negócio.
- Mass Assignment e $fillable vs $guarded
- Mecanismo de proteção contra gravação indevida; $fillable define lista branca de atributos permitidos via create()/update(), enquanto $guarded define campos proibidos.
- Eager Loading vs Lazy Loading
- Lazy Loading carrega relacionamentos sob demanda gerando problema de N+1 queries; Eager Loading (with()) pré-carrega relacionamentos em poucas queries otimizadas.
- Lazy Loading Prevention
- Model::preventLazyLoading(!app()->isProduction()) desativa lazy loading em desenvolvimento, lançando exceção para forçar o uso correto de Eager Loading.
- Eloquent Scopes Locais
- Métodos iniciados por scope (ex: scopeAtivo($query)) no model que encapsulam filtros SQL reutilizáveis invocados diretamente na Query Builder sem o prefixo scope.
- Eloquent Scopes Globais
- Classes que implementam Scope e aplicam restrições automáticas a todas as queries de um model (como SoftDeletes), adicionadas via booted() com addGlobalScope().
- Eloquent Observers
- Classes dedicadas a escutar múltiplos eventos do ciclo de vida de um model (creating, created, updating, deleted, etc.), desacoplando ações secundárias do modelo.
- Model Events vs Observers
- Model Events são declarados diretamente no model via closures no método booted(); Observers agrupam todos os handlers de eventos em uma classe externa dedicada.
- Eloquent Accessors e Mutators modernos
- Métodos com retorno de objeto Attribute onde get define a transformação ao ler o dado e set define a formatação antes de persistir no banco de dados.
- Eloquent Casts
- Conversão automática de colunas para tipos nativos do PHP (int, bool, json, collection, AsEnumCollection, etc.), declarada pela propriedade $casts ou método casts().
- Database Transactions manuais
- Controle explícito via DB::beginTransaction(), DB::commit() e DB::rollBack(), garantindo atomicidade em operações de múltiplos passos.
- DB::transaction() closure
- Executa operações dentro de uma transação automática, fazendo commit se o closure finalizar com sucesso ou rollback e re-lançamento caso ocorra qualquer exceção.
- Database Migrations
- Controle de versão do banco de dados em código PHP estruturado, contendo métodos up() para aplicar alterações estruturais e down() para reverter.
- Queues e Jobs
- Processamento assíncrono de tarefas em segundo plano (enviar e-mails, processar arquivos), implementando a interface ShouldQueue despachada para drivers de fila.
- Job Middleware
- Camada que intercepta a execução de jobs na fila, permitindo implementar rate limiting, travas de concorrência ou verificações de integridade antes do handle().
- Unique Jobs
- Jobs que implementam ShouldBeUnique, impedindo que tarefas idênticas fiquem enfileiradas simultaneamente com base em uma chave única e tempo de lock.
- Eventos e Listeners
- Implementação do padrão Observer/Pub-Sub onde um Evento transporta dados de um acontecimento e múltiplos Listeners respondem de forma síncrona ou assíncrona.
- Event Discovery
- Mapeamento automático entre Eventos e Listeners pelo Laravel baseado nos type-hints do método handle() do listener, dispensando registro manual em providers.
- Task Scheduling
- Agendador centralizado no Laravel disparado a cada minuto pelo cron do servidor (* * * * * php artisan schedule:run), definindo frequência fluente de comandos.
- Schedule Without Overlapping
- Método ->withoutOverlapping() no agendador que usa locks em cache para impedir que uma tarefa agendada rode se a execução anterior ainda estiver ativa.
- Cache Tags
- Recurso suportado por Redis e Memcached que permite taguear itens em cache e invalidar grupos inteiros de dados relacionados de uma só vez (flush por tag).
- Cache Lock Atômico
- Mecanismo (Cache::lock()) que impede condições de corrida distribuídas garantindo que apenas um processo execute determinada seção crítica simultaneamente.
- Laravel Gate
- Abordagem baseada em closures para autorização rápida de ações gerais independentes de model, acessível via Gate::define() e Gate::allows().
- Laravel Policy
- Classe que agrupa lógica de autorização vinculada a um model Eloquent específico, mapeando permissões como view, create, update e delete para usuários.
- Laravel Sanctum
- Sistema de autenticação leve para SPAs via cookies de sessão com proteção CSRF e para APIs externas por meio de Personal Access Tokens com escopos de habilidade.
- API Resources (JsonResource)
- Camada de transformação entre os models Eloquent e as respostas JSON, controlando formato, ocultando colunas sensíveis e formatando relacionamentos.
- Contextual Binding
- Configuração no container para injetar implementações diferentes de uma mesma interface dependendo de qual classe concreta está solicitando a dependência.
- Custom Artisan Commands
- Classes que herdam de Command, com assinatura definida em $signature e execução em handle(), usadas para automações, rotinas CLI e manutenção do sistema.
- HTTP Client (PendingRequest)
- Wrapper sobre a biblioteca Guzzle com sintaxe limpa para requisições externas, pooling assíncrono, retries com backoff e mocks integrados para testes.
- Laravel Notifications
- Mecanismo uniforme para entrega de mensagens curtas em múltiplos canais simultâneos (mail, database, SMS via Vonage, broadcast, Slack).
- Database Seeding e Factories
- Factories usam Faker para definir blueprints de dados fictícios para testes; Seeders persistem esses dados no banco para ambientes de teste e homologação.
- Pest PHP / PHPUnit no Laravel
- Frameworks de testes integrados que suportam Feature Tests (requisições HTTP completas e banco em memória) e Unit Tests (testes isolados de métodos).
- RefreshDatabase Trait
- Trait em testes que migra o banco de dados na primeira execução e envolve cada teste em uma transação com rollback automático ao final de cada execução.
- Mocking e Bus Fake
- Recursos como Bus::fake() e Event::fake() que interceptam o despacho de jobs/eventos durante testes para garantir que foram chamados sem executá-los de fato.
- Rate Limiting com RateLimiter
- Controle centralizado de vazão de requisições por IP ou usuário autenticado, aplicado via middleware 'throttle' para mitigar ataques de força bruta e abusos.
- Otimizações de Produção (Artisan Cache)
- Comandos essenciais de build como config:cache, route:cache, view:cache e event:cache que compilam arquivos PHP estáticos acelerando o boot.
- Tratamento de Exceções Customizado
- Métodos renderable() e reportable() no manipulador de exceções para transformar erros específicos em respostas JSON padronizadas ou enviá-los a serviços externos.
- Database Pruning (Mass Pruning)
- Interface MassPrunable ou trait Prunable no model com método prunable(), permitindo remoção periódica e performática de registros obsoletos via artisan.