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

  1. Descreve a funcionalidade como uma história de utilizador com as suas regras.
  2. Indica as tabelas que já existem para não haver duplicados.
  3. Gera os ficheiros com o Artisan, cola o código e corre os testes.
  4. 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

  1. php artisan make:policy QuotePolicy --model=Quote
  2. No controlador: Gate::authorize('approve', $quote);
  3. Teste Pest: um cliente que tenta aprovar recebe 403, tal como um cliente que abre o orçamento de outro.
  4. isAdmin(), isSalesRep() e isCustomer() 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.

Prompts relacionados