Funcionalidade completa em Laravel: migração, policy, controlador e testes
Implementa uma funcionalidade Laravel de ponta a ponta: migração, modelo, Form Request, Policy, controlador, rotas e testes Pest ou PHPUnit, sem consultas N+1. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 5 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Intermédio · Código · Pendente de revisão editorial
Prompt
Atua como programador PHP sénior especializado em Laravel e em código fácil de manter.
Preciso de implementar esta funcionalidade numa aplicação Laravel {{versao_laravel}}: {{funcionalidade}}.
- Entidades e relações: {{entidades}}
- Perfis e permissões: {{perfis}}
- Framework de testes: {{testes}}
Entregáveis, por esta ordem:
1. Resumo do desenho: tabelas, relações Eloquent, rotas e o papel de cada camada (controlador, Form Request, Policy, classe de ação ou serviço).
2. Migrações com chaves estrangeiras, índices e `onDelete` explícito, e os modelos com `$fillable` ou `$guarded`, `casts` e relações.
3. Form Requests com regras de validação e mensagens em português.
4. Uma Policy registada e aplicada com `authorize` ou o middleware `can`, para cada perfil.
5. Um controlador leve (resource ou de ação única) que delegue a lógica de negócio numa classe de ação, com `DB::transaction` sempre que houver várias escritas.
6. Rotas com nome, middleware e route model binding.
7. Resposta: API Resource se for uma API, ou vistas Blade mínimas se for web. Eager loading (`with`) para evitar consultas N+1.
8. Factories e testes de funcionalidade: caso feliz, validação falhada, utilizador sem permissão (403) e registo de outro utilizador.
9. Comandos Artisan para gerar os ficheiros e correr os testes.
Restrições:
- Segue as convenções do Laravel e a PSR-12; nenhuma lógica nos ficheiros de rotas.
- Não inventes colunas, perfis nem regras: pergunta-me o que faltar ou usa [PREENCHER].
- Se a versão escolhida mudar alguma coisa (por exemplo a estrutura de `bootstrap/app.php`), indica-o.
Formato: um bloco de código por ficheiro com o caminho e, no fim, a lista de passos de integração.Como utilizar
- Descreve a funcionalidade como uma história de utilizador com as suas regras.
- Indica as tabelas que já existem para não haver duplicados.
- Gera os ficheiros com o Artisan, cola o código e corre os testes.
- Revê a Policy com cada perfil antes de publicar.
Exemplo de utilização
Funcionalidade: os clientes pedem orçamentos e os comerciais aprovam-nos · Entidades: Cliente, Orçamento, LinhaOrçamento · Laravel 11 · Pest.
Exemplo de resultado
4. Policy — app/Policies/QuotePolicy.php
<?php
namespace App\Policies;
use App\Enums\QuoteStatus;
use App\Models\Quote;
use App\Models\User;
class QuotePolicy
{
// O admin pode tudo; null deixa a decisão para os outros métodos
public function before(User $user): ?bool
{
return $user->isAdmin() ? true : null;
}
public function view(User $user, Quote $quote): bool
{
return $user->isSalesRep() || $quote->customer->user_id === $user->id;
}
public function create(User $user): bool
{
return $user->isCustomer();
}
public function approve(User $user, Quote $quote): bool
{
return $user->isSalesRep() && $quote->status === QuoteStatus::Pending;
}
}
No Laravel 11 a Policy é descoberta automaticamente se seguir a convenção App\Models\Quote → App\Policies\QuotePolicy; não é preciso registá-la num AuthServiceProvider.
Integração
php artisan make:policy QuotePolicy --model=Quote- No controlador:
Gate::authorize('approve', $quote); - Teste Pest: um cliente que tenta aprovar recebe 403, tal como um cliente que abre o orçamento de outro.
isAdmin(),isSalesRep()eisCustomer()dependem de como guardas os perfis → [COMPLETAR]…
Dados-chave
- Categoria
- Programação e desenvolvimento · PHP
- Tipo de resultado
- Código
- Nível
- Intermédio
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Funcionalidade, Entidades e relações, Perfis e permissões, Versão do Laravel e Framework de testes
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Porquê uma classe de ação em vez de pôr tudo no controlador?
A lógica fica reutilizável a partir de comandos, jobs e testes, e o controlador só traduz HTTP. Também é mais fácil testá-la isoladamente.
Como deteto consultas N+1 no código gerado?
Ativa `Model::preventLazyLoading()` fora de produção: o Laravel lança uma exceção sempre que uma relação é carregada de forma preguiçosa.
Para que serve este prompt?
Implementa uma funcionalidade Laravel de ponta a ponta: migração, modelo, Form Request, Policy, controlador, rotas e testes Pest ou PHPUnit, sem consultas N+1.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Funcionalidade, Entidades e relações, Perfis e permissões, Versão do Laravel e Framework de testes). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.