Je Controller Doet Te Veel Werk

Open je controller. Bekijk je store-methode.

Heeft het 40 regels code? Begint het met een enorm validatieblok, gevolgd door verschillende if-statements, dan businesslogica, en eindigt het met een return?

Je controller doet werk dat niet zijn taak is.

Een controller heeft één simpele rol. Het ontvangt een request, roept een service aan om het probleem op te lossen, en geeft een response terug. Zie het als een ober. Een ober brengt je eten. Ze koken het niet.

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

Laravel heeft een ingebouwde oplossing: Form Requests.

Stop met het herhalen van validatie- en autorisatielogica in elke methode. Gebruik het Single Responsibility Principle. Een klasse zou slechts één reden moeten hebben om te veranderen. Een controller verandert wanneer de request-flow verandert. Het zou niet moeten veranderen alleen omdat een validatieregel verandert.

Voer dit commando uit om een specifieke request-klasse aan te maken: php artisan make:request StorePostRequest

Verplaats je logica naar deze nieuwe klasse. Een Form Request handelt drie hoofdzaken af:

• Autorisatie: Gebruik de authorize-methode om te bepalen of een gebruiker een actie mag uitvoeren. Als deze false retourneert, stuurt Laravel automatisch een 403-foutmelding.

• Validatie: Gebruik de rules-methode om je gegevensvereisten te definiëren.

• Gegevensvoorbereiding: Gebruik prepareForValidation om gegevens op te schonen of te transformeren voordat de validatie wordt uitgevoerd. Dit is perfect voor het genereren van slugs of het normaliseren van telefoonnummers.

Zodra je deze logica verplaatst, krimpt je controller. Het ziet er dan misschien zo uit:

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

Dat is het. Twee regels.

De controller blijft slank omdat Laravel de validatie en autorisatie uitvoert voordat de methode überhaupt start. Als de gegevens niet kloppen, krijgt de gebruiker direct een foutmelding.

Een woord van waarschuwing. Gebruik Form Requests niet voor alles. Als je een kleine route hebt met één simpel veld, houd de validatie dan inline. Gebruik Form Requests wanneer de logica groeit, zich herhaalt of permissies betreft.

Zet ook geen businesslogica in een Form Request. Berekeningen en database-updates horen in een Service-laag thuis.

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.

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