Meer informatie Ja, ik geef toestemming
Door Johan van Helden Leestijd 10 min.

10 Laravel best practices

Om Laravel software op het hoogste niveau te ontwikkelen, is het belangrijk dat je weet welke technieken of werkmethoden bewezen effectiever zijn dan andere technieken of werkmethoden.

Bij Way2Web Software zijn we continu op zoek naar manieren om onszelf te verbeteren. En omdat kennis en ervaring delen een van de sterke kanten van een opensource framework als Laravel is, geven we je hierbij met plezier 10 best practices zoals wij die toepassen (in volstrekt willekeurige volgorde). Doe er je voordeel mee!

Way2Web Laracon Peter Paul

Ook offline – zoals bijvoorbeeld op de Laracon – zijn er nieuwe best practices te vinden.

#1. Een lijst met default packages

Om te voorkomen dat iedereen óf het wiel opnieuw uitvindt óf verschillende packages gebruikt, is het een goed idee om een lijst met standaard packages te hebben. Wil je iets met rollen of permissies doen? Dan gebruik je de “spatie/laravel-permissions” package. Wil je met data en tijd gaan werken, dan gebruik je daar “carbon/carbon” voor. En zo kun je per onderwerp en functionaliteit een lijst met packages maken zodat iedereen direct weet welke ze kunnen gebruiken en iedereen op dezelfde lijn zit. En als iemand een nieuwe of betere package vind, deel het met de groep, de lijst kan altijd aangepast en geüpdatet worden.

#2. Policies om te bepalen wie wat met welke entiteit mag doen

Om te bepalen of de ingelogde gebruiker een entiteit mag zien/bewerken/aanmaken of verwijderen, gebruik je policies. Dit is een plek waar al deze logica per entiteit uitgeschreven staat. Moet er dus iets aan deze logica veranderen, weet je direct waar je moet kijken. En het aanroepen van de policiy is ook nog eens erg simpel; “$user->can(‘edit’, $user)” bijvoorbeeld. Of “$this->authorize(‘edit’, $user)”.

#3. Gebruik “Eloquent models”

Eloquent is een stuk gereedschap waarmee je op een simpele en elegante manier met de database communiceert. Waar je zonder Laravel bijvoorbeeld de volgende query zou schrijven: “SELECT * FROM users” om alle gebruikers op te halen, kunnen we nu simpelweg “User::all()” uitvoeren. Dit leest een stuk fijner weg als je door de code leest.

#4. Gebruik relaties op het model

Dit borduurt voort op punt 1. Waar we vroeger bijvoorbeeld “SELECT * FROM users INNER JOIN companies ON companies.id = users.company_id” hadden moeten uitvoeren om de bedrijfsgegevens van een gebruiker op te halen kunnen we met Laravel i.c.m. Eloquent “$user->company->name” uitvoeren als je de relatie op het model gedefinieerd hebt.

#5. Laad relaties vooraf in

Dit borduurt weer verder op punt 2. Als je relaties gebruikt, en je roept in je code “$user->company->name” aan, dan zal er een nieuwe database query worden uitgevoerd als deze informatie nog niet bekend is. Als je niet oplet, en dit gebeurt in een gebruikersoverzicht met honderden gebruikers zijn dit honderden query’s! Dit kan je simpelweg voorkomen door wanneer je de gebruikers ophaalt de relatie erbij op te halen: “User::with(‘company’)->get()”

#6. Gebruik “Form Requests” voor validatie en authorizatie

Als je een formulier hebt dat je kunt opslaan, zijn er meerdere manieren om de input te valideren en te kijken of een gebruiker dit überhaupt wel mag. Wij hebben ervoor gekozen om dit met Form Requests te doen. Dit is een verzameling van de logica die bij het afhandelen van het formulier komt kijken, in 1 bestand. Hier staat bijvoorbeeld in dat het “wachtwoord” veld een bepaalde sterkte moet hebben, een telefoonnummer een bepaald formaat moet hebben, en dat je het formulier alleen mag opslaan als het je eigen profiel is.

Winnaars Hackathon Way2Web

Werk jij volgens de laatste best practices? Dan zou je ook eens mee kunnen doen aan een Laravel Hackathon

#7. Gebruik vertalingen

Niets is vervelender dan het moeten nalopen van de hele applicatie als de klant een tekst wil veranderen. Om die reden gebruiken we vertalingen. De daadwerkelijke tekst staat op 1 plek in de applicatie, het vertalingsbestand, en op de plekken waar we deze tekst willen neerzetten roepen we simpelweg een verwijzing naar de vertaling aan. Laravel doet de rest.

#. 8 Zorg dat bij het opzetten van een applicatie alles met nepdata wordt gevuld

Ook erg vervelend is het dat je voor het maken van een aanpassing eerst 20 minuten bezig bent met vullen van je lokale ontwikkelomgeving met data. Laravel heeft “Factories” en “Seeders” die het mogelijk maken om met 1 commando een compleet gevulde database op te zetten. Deze data zijn nep. Daar gebruiken we een “Faker” voor. Zo hebben we altijd een compleet gevulde database. Dat maakt het veel makkelijker om fouten te verhelpen of nieuwe features te bouwen! Als je dus een nieuwe entiteit in de applicatie introduceert, of een aanpassing maakt op een bestaande, zorg er dan voor dat deze ‘geseed’ wordt.

#9. Route Model Binding

Je kent het misschien wel, een URL als deze: “/user/123-123-123”. Het stukje “123-123-123″ is hier een verwijzing naar een gebruiker. Als je geen Route Model Binding gebruikt, zou je eerst handmatig nog de gebruiker moeten ophalen d.m.v. $user = User::findOrFail($id)”. Met Route Model Binding doet Laravel dit automatisch voor je en kun je direct met de “$user” aan de slag.

#10. Tests, Tests en Tests

Als je een stuk functionaliteit oplevert, schrijf hier dan ook tests bij! Dit zorgt ervoor dat we te allen tijde weten dat de applicatie intact blijft als we een nieuwe aanpassingen maken. Je kunt niet altijd weten of een aanpassing op plek “A” invloed heeft op plek “B”. Automatische tests zorgen ervoor dat je een notificatie krijgen op het moment dat een aanpassing invloed heeft op een plek waar wij dit niet verwachten. Dus heb je niet ingebouwd dat gebruiker X alleen een gebruiker in een bepaalde situatie mag bewerken? Schrijf hier tests voor! Niet alleen wanneer het mag, maar ook dat je netjes geblokkeerd wordt op het moment dat het niet mag. Dus test ook de randgevallen. More is better!

Tips? Graag!

Wij houden deze lijst graag actueel en zijn altijd op zoek naar nieuwe invalshoeken. Heb je daarom best practices die hier ook in horen? Stuur ze dan naar peterpaul.keulers@way2web.nl!

Bent u klaar voor the next level?

De digitale transformatie biedt fantastische nieuwe mogelijkheden en kansen. Ook voor uw onderneming, dat weet ik zeker. Als IT-specialist én ondernemer praat ik daar graag eens met u over verder. Geheel vrijblijvend natuurlijk. Zullen we een afspraak maken?