Laravel validatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorn Reed

Jorn Reed

12/07/2020 21:45:08
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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!
 
PHP hulp

PHP hulp

28/09/2020 01:56:44
 
Marthijn Buijs

Marthijn Buijs

13/07/2020 19:57:22
Quote Anchor link
Misschien heb je hier wat aan, om het overzichtelijk te houden zou je een eigen FormRequest-klasse kunnen maken (deze klasse is overigens ook een instantie van bovenstaande Request-klasse).

https://laravel.com/docs/6.x/validation#form-request-validation
 
Jorn Reed

Jorn Reed

17/07/2020 16:56:12
Quote Anchor link
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.
 
Marthijn Buijs

Marthijn Buijs

17/07/2020 22:07:28
Quote Anchor link
Als de validatie niet klopt dan zal de controller actie niet eens uitgevoerd worden. Je validatie meldingen die je dan hebt staan gewoon in de globale $errors variabel.
Gewijzigd op 18/07/2020 15:08:10 door Marthijn Buijs
 
Jorn Reed

Jorn Reed

18/07/2020 17:38:19
Quote Anchor link
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?
 
Marthijn Buijs

Marthijn Buijs

19/07/2020 14:38:54
Quote Anchor link
Precies!
 
Jorn Reed

Jorn Reed

19/07/2020 17:44:55
Quote Anchor link
Oh oke top! Iemand anders zei dat het niet nodig is om een custom form request te maken. Oftewel als je de validatie in de store functie plaatst, dat zodra de validatie mislukt dat hij het opslaan niet uitvoert, maar met deze code gebeurde dat wel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3

$post = Post::create();
$post->translations()->create($this->validatedData());

Als de validatie mislukt voor de vertalingen word er alsnog een post aangemaakt, met die oude code.
 
Marthijn Buijs

Marthijn Buijs

19/07/2020 22:28:26
Quote Anchor link
Bij een custom form request heb je in een meer overzichtelijke mogelijkheid om attributen van velden aan te geven (Laravel bedenkt ze zelf a.d.h.v. de input name) hierbij zal het vertalen ervan ook makkelijker zijn.

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
 
Jorn Reed

Jorn Reed

19/07/2020 22:57:42
Quote Anchor link
Ja inderdaad, en het belangrijkste vind ik dat door die custom form requests de controllers wat schoner zijn/
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.