Your Controller Is Doing The Wrong Job

Abra seu controller. Procure por um método store.

Ele tem 40 linhas de código? Você vê um bloco de validação gigante, vários comandos if, lógica de negócio e, por fim, um comando de retorno?

Seu controller está fazendo um trabalho que não deveria fazer.

Um controller tem apenas um trabalho. Ele recebe uma requisição, chama um serviço para resolver o problema e retorna uma resposta. Ele é o garçom, não o chef.

Quando você coloca validação e autorização dentro de um controller, ele se torna uma bagunça. Você acaba com 80 linhas de código que ninguém quer tocar.

O Laravel tem uma solução nativa: Form Requests.

Um padrão ruim comum se parece com isto:

  • Validar dados de entrada
  • Verificar permissões de usuário
  • Transformar dados
  • Executar lógica de negócio

Isso quebra o Princípio da Responsabilidade Única (Single Responsibility Principle). Uma classe deve ter apenas um motivo para mudar. Um controller muda quando o fluxo da requisição muda. Ele não deve mudar apenas porque uma regra de validação mudou.

Use este comando para corrigir: php artisan make:request StorePostRequest

Isso cria um arquivo dedicado para a lógica da sua requisição. Mova estas três coisas para o Form Request:

  • Autorização: Use o método authorize() para verificar permissões.
  • Validação: Use o método rules() para definir os requisitos dos seus dados.
  • Preparação de Dados: Use o prepareForValidation() para limpar ou formatar os dados antes da validação.

Agora olhe para o seu controller novamente:

public function store(StorePostRequest $request)
{
    $post = Post::create($request->validated());
    return redirect()->route('posts.show', $post);
}

O controller agora tem apenas duas linhas. Ele volta a agir como um garçom.

O Laravel executa a autorização e a validação automaticamente antes mesmo do método do controller começar. Se a validação falhar, o usuário recebe um erro imediatamente.

Siga estas diretrizes:

  • Mantenha a validação inline se ela for curta e usada em apenas um lugar.
  • Use um Form Request se a validação crescer, se repetir ou incluir autorização.
  • Não coloque lógica de negócio em um Form Request. Use uma camada de Service para isso.

Encontre seu controller mais bagunçado hoje. Extraia a validação para um Form Request. Veja-o diminuir.

Qual é o maior método store que você já viu? Conte para mim nos comentários.

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o