Show Menu
Cheatography

Learning Laravel Cheat Sheet (DRAFT) by

Trying to follow along laracasts, creating my own cheatsheet

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Forms

Er zijn 7 restful controller acties (conventie/richtlijn):
index
: toont een lijst van iets (artik­elen, gebrui­kers, etc
show
toont een specifiek item (artikel, gebruiker etc)
create
toont een view om item aan te maken.
store
slaat item op.
edit
Toont een view om bestaand item aan te passen.
update
slaat wijzig­ingen op.
destroy
verwijdert item.

Met de artisan optie -r kunnen deze automa­tisch aangemaakt worden bij het maken van een contro­ller. Met de
-m Modelnaam
optie erbij wordt een bijpassend database model aangem­aakt.
Browsers onders­teunen eigenlijk allen GET en POST requests. Om toch een PUT of ander soort request te simuleren vanuit een form, stel het formulier in op POST en voeg een
@metho­d('­PUT')
toe in het formulier.
Bij het doen van een POST, bijvoo­rbeeld vanuit een form, kan een 419 error ontstaan als resultaat van besche­rming tegen XSS expoits. Door het toevoegen van een
@csrf
statement in de view na het <fo­rm> element wordt deze fout voorkomen.

Algemeen

Alle resources (afb, JS, etc) in de
public
map.

Routing

Routes worden gedefi­niëerd in
routes­/we­b.php
Een route wordt gedefi­nieerd met
Route:­:ge­t('­url', $data);

of
Route:­:ge­t('­url', functi­on(­):v­iew­{}));

of
Route:­:ge­t('­/ur­l/{­var­iab­ele}', functi­on(­$va­ria­bel­e){});

of (om functie functi­onname in class contro­lle­rclass aan te roepen)
Route:­:ge­t('­/ur­l/{­var­iab­ele}', 'contr­oll­erc­las­s@f­unc­tio­nna­me');
Data die naar de view moet worden gestuurd moet gedaan worden in de closure functie in de routes file als
return view('­vie­wnaam', ['key'­=>'­val­ue']);
POST of GET argumenten kunnen worden opgevraagt met de
reques­t($­arg­ume­ntnaam)
functie.
Foutaf­han­deling (404 pagina) wordt gestart met
abort(int $statu­scode, string 'bericht')
functie.)
Naast
Route:­:ge­t('url, $data)
zijn er ook
Route:­:post
,
Route::put
en
Route:­:delete
Om toekom­stb­est­endig te zijn kun je routes benoemen, als volgt:
Route:­:ge­t('­/ar­tic­les­/{a­rti­cle}', 'Artic­les­Con­tro­lle­r@s­how­')-­>na­me(­'ar­tic­les.sh­ow');

In blade kan dan route worden weergegven met
{{ route(­'ar­tic­les.show', $artic­le-­>id) }}
 

Artisan

Een nieuwe controller aanmaken:
make:c­ont­roller Contro­lle­rNaam
Een eloquent model aanmaken:
make:model Modelnaam
Een migratie aanmaken:
make:m­igr­ation genere­er_­dat­aba­se_­object
Een migratie toepassen:
migrate
Een migratie rollback:
migrat­e:r­ollback
Database legen en migraties opnieuw uitvoeren:
migrat­e:fresh
Een migratie, factory en controller maken voor model:
make:model Project -a

Blade language

Escape variabelen met
{{ $variabele }}
Variabelen expliciet NIET escapen met
{!! $variabele !!}
Elementen in objecten weergevem met
{{ $objec­t->­element }}
Een template kan bouwen op een andere door het
@extends ('best­and­sna­am-­zon­der­-ex­ten­sie')
commando
Er kan een sectie uit een templa­te-­bestand worden ingevoegd op de huidige positie met het
@yield­('s­ect­ien­aam')

commando.
Een sectie word gedefi­nieerd met
@secti­on(­'se­cti­enaam')

en geëindigd met
@endse­ction
Veel PHP is gewoon beschi­kbaar, zoals
Reques­t::­path()
Meerdere items zijn te plaatsen als
@foreach ($articles as $article)
<li>Hier invoegen met {{ articl­e->­title }}</li>
@endforeach
De asset map kan worden aagegeven met
{{ asset }}subm­ap/­bes­tan­dsn­aam.css
Foutme­ldingen (zoals bij formva­lid­ati­efo­uten) kunnen worden weerge­geven met
{{ $error­s->­fir­st(­'ve­ldn­aam') }}
Alleen weergeven als een variab­ele­/at­tribuut bestaat:
@if ($erro­rs-­>ha­s('­tit­le)­)<h­tml­>@endif
Inline text plaatsen met conditie:
{{ $error­s->­has­('t­itle') ? 'tekst' : '' }}
Bij foutme­lding iets weergeven:
@error­('v­eld­naa­m')­<b> uw tekst hier </b­>@e­nderror
Een veldwaarde van een vorige submit invullen (zoals bij het falen van formvalidatie):
{{ old('v­eld­naam') }}

Migrations (Database)

Een migratie is een layout voor de database, of een aanpassing daaraan.
Bestanden met migraties staan in
databa­se/­mig­rations
Voor develo­pment kunnen het beste bestaande migraties gewijzigd worden. Voor wijzig­ingen aan live servers maak een nieuwe migratie.
 

Contro­llers

Contro­llers staan in
Http/C­ont­rollers
Request data kan worden opgevraagd met de
reques­t('­vel­dnaam)
functie.
De
request()
functie (zonder argume­nten) retour­neert een object met
valida­te(­array $opties)
functie, zoals dit:
request()->validate([
'title' => ['requ­ired', 'min:3', 'max:255'],
'excerpt' => 'required',
'body' => 'required'
]);

De validate() functie retour­neert bovendien een array met valide elementen die gerefe­reerd kunnen worden bij verdere verwerking van de formul­ier­geg­evens.
In contro­llers wordt vaak gegevens uit een DB gehaald met functies als
$article = Articl­e::­fin­dOr­Fai­l($id);
)
er vanuit­gaande dat er een eloquent model Article bestaat. In plaats daarvan kunnen we ook Laravel om het eloquent model vragen als argument op de functie, zoals
public function show(A­rticle $article){
//code hier
}

De variab­elenaam moet hierbij overee­nkomen met een wildcard uit de route.

Model (Database)

Config­uratie in
config­/da­tab­ase.php
en in
.env
file in de root
Eloquent modellen zijn classes die een database tabel repres­enteren en queries kunnen uitgevoerd worden via deze class. Deze classes zijn een goede plaats voor functies om die tabel te manipu­leren. Het resultaat van een query via een eloquent model is gerepr­ese­nteerd in diezelfde class.
Indien een eloquent model is aangemaakt kun je de namespace van het eloquent model importeren zoals
use App\Mo­delnaam

en dan
Modeln­aam­:wh­ere­('k­olo­mnaam', $waard­e)-­>fi­rst();
Queries zien eruit als:
\DB::t­abl­e('­tab­eln­aam­')-­>wh­ere­('k­olo­mnaam', $waard­e)-­>fi­rst();
->f­irs­tOr­Fail()
haalt 1 waarde op of geeft 404. Soortg­elijk voor de methode
findOr­Fail()
.
Eloquent modellen bevinden zich in
app/
de
all()
functie haalt alle records uit een tabel op. Zo zijn er ook de
first()
functie (eerste result­aat),
take(int $aantal)
(gedef­inieerd aantal records ophalen) en
pagina­te(int $aanta­l-p­er-­pagina)
(gepag­ineerd ophalen).
De
latest­('d­atu­mve­ld-­rec­ord­naam')
functie haalt meest recente record op.
find($id)
haalt een record op met id $id.
Wildcards in routes worden standaard gematched naar het id veld in een database. Om de wildcard naar een ander veld te laten matchen, definiëer de functie
public function getRouteKeyName(){
return 'keynaam';
}

in het eloquent model.
Een nieuw record aanmaken kan als volgt:
$article = new EloquentModelNaam();
$article->title = request('title');
$article->excerpt = request('excerpt');

Maar ook als:
EloquentModelNaam::create([
'title' => request('title'),
'excerpt' => request('excerpt')
]);

Bij deze laatste methode moet er opgepast worden: de array zou onbedoeld meer velden kunnen bevatten dan bedoeld. Daarom moet er bij Laravel in het eloquent model worden aangegeven welke velden met een publiek form in te vullen zijn door een class property $fillable te definiëren:
protected $fillable = ['title', 'excer­pt'];

Alle velden expliciet niet bewaken kan met
protected $guarded = [];
Relaties tussen eloquent models kunnen worden gedefi­niëerd in een functie in een eloquent model. Bijvoorbeeld
return $this-­>ha­sMa­ny(­Art­icl­e::­class);

geeft een relatie aan met meerdere articles.

Views

Views worden opgeslagen in
resour­ces­/views
Gegene­reerde resources worden opgeslagen in de
resources
map. Overige in de
public
map.
In de
/webpa­ck.m­ix.js
wordt aangegeven wat voor bestanden gecomp­ileerd moeten worden, zoals SASS en enkele JS bestanden. Dit wordt gedefi­nieerd met een regel zoals
mix.sa­ss(­'re­sou­rce­s/s­ass­/be­sta­nd.s­css', 'publi­c/d­oel­map');
Het bestand
/packa­ge.json
definieert depend­encies. Deze depend­encies moeten met de hand geïnst­alleerd worden met npm (op te halen via nodejs.org), met het commando
npm install
.
Resources compileren wordt in gang gezet met
npm dev
.
npm run watch
houdt resources in de gaten en compileert ze automa­tisch.