Laravel validatie
Ik ben dus al een tijd bezig met een Laravel website waarvan elk bericht 3 vertalingen kan hebben.
Elke keer als je een vertaling aanmaakt, maakt hij automatisch een post aan om daar die vertaling aan te koppelen.
Wil je een extra vertaling toevoegen aan een bestaand bericht, moet je eerst op het juiste bericht klikken. Omdat de berichten tabel alleen maar een id, created_at en updated_at heeft, kan ik daarvoor dus geen validatie maken. Stel je vergeet een veld van vertalingen in te vullen, krijg ik wel gewoon de validatie meldingen, maar maakt hij nog steeds een post aan zonder gekoppelde vertaling. Ik heb dat nu zo kunnen oplossen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function store(Request $request)
{
if($this->validatedData()){
$post = Post::create();
$post->translations()->create($this->validatedData());
}
return redirect('/posts');
}
protected function validatedData(){
return request()->validate([
'lang_id' => 'required',
'title' => 'required',
'content' => 'required',
]);
}
Maar is dit de beste manier/enige? Vind het naar mijn mening een beetje slordig, maar het werkt wel. Als iemand een betere oplossing heeft, hoor ik het graag!
Ik had zoiets gelezen inderdaad. Maar ik vroeg me dan af. Je verplaatst de validatie code in die klasse, wat je zegt. En vervolgens gebruik je die klasse naam in de parameters van je functie waar je bijvoorbeeld een post opslaat. Wat voor soort if statement moet ik dan gebruiken in de `store()` functie om te checken of alle velden goed zijn ingevuld? Want als er een vertaling een veld leeg van is. Dan krijg je wat errors terug en moet het geen post aanmaken waar geen vertaling aan gekoppeld is.
Gewijzigd op 18/07/2020 15:08:10 door Marthijn Buijs
oh oke, dus de validatie verplaatsen in een custom form request, dan de form request aanroepen in de store functie de parameters. En dan in de html gewoon de errors printen?
Precies!
Als de validatie mislukt voor de vertalingen word er alsnog een post aangemaakt, met die oude code.
Ook bied een custom form request de mogelijk om de toegang te ontzeggen tot een request, denk aan controle of bericht bij een gebruiker hoort.
Verder kan je zelf error berichten opgeven die gebruikt worden i.p.v. de default valdiatiemelding.
Kortom: kijk eens verder op https://laravel.com/docs/6.x/validation#form-request-validation
Ja inderdaad, en het belangrijkste vind ik dat door die custom form requests de controllers wat schoner zijn/