Je controller doet het verkeerde werk

Open je controller. Zoek naar een store-methode.

Heeft het 40 regels code? Zie je een gigantisch validatieblok, verschillende if-statements, business logic en dan een return-statement?

Je controller doet werk dat hij niet zou moeten doen.

Een controller heeft één taak. Hij ontvangt een request, roept een service aan om het probleem op te lossen, en geeft een response terug. Het is de ober, niet de chef.

Wanneer je validatie en autorisatie in een controller plaatst, wordt het een puinhoop. Je eindigt met 80 regels code waar niemand aan wil zitten.

Laravel heeft een ingebouwde oplossing: Form Requests.

Een veelvoorkomend slecht patroon ziet er zo uit:

  • Het valideren van inputdata
  • Het controleren van gebruikersrechten
  • Het transformeren van data
  • Het uitvoeren van business logic

Dit schendt het Single Responsibility Principle. Een klasse zou slechts één reden moeten hebben om te veranderen. Een controller verandert wanneer de request-flow verandert. Hij zou niet moeten veranderen alleen omdat een validatieregel verandert.

Gebruik dit commando om het op te lossen: php artisan make:request StorePostRequest

Dit maakt een specifiek bestand aan voor je request-logica. Verplaats deze drie zaken naar de Form Request:

  • Autorisatie: Gebruik de authorize() methode om rechten te controleren.
  • Validatie: Gebruik de rules() methode om je data-eisen te definiëren.
  • Data-voorbereiding: Gebruik prepareForValidation() om data op te schonen of te formatteren vóór de validatie.

Kijk nu opnieuw naar je controller:

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

De controller is nu slechts twee regels lang. Hij gedraagt zich weer als een ober.

Laravel voert de autorisatie en validatie automatisch uit voordat de controller-methode überhaupt start. Als de validatie mislukt, krijgt de gebruiker direct een foutmelding.

Volg deze richtlijnen:

  • Houd validatie inline als het kort is en slechts op één plek wordt gebruikt.
  • Gebruik een Form Request als de validatie groeit, wordt herhaald of autorisatie bevat.
  • Plaats geen business logic in een Form Request. Gebruik daarvoor een Service layer.

Zoek vandaag nog je meest rommelige controller. Extraheer de validatie naar een Form Request. Kijk hoe hij krimpt.

Wat is de grootste store-methode die je ooit hebt gezien? Laat het me weten in de reacties.

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