Forms
Er zijn 7 restful controller acties (conventie/richtlijn): index
: toont een lijst van iets (artikelen, gebruikers, 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 wijzigingen op. destroy
verwijdert item. Met de artisan optie -r kunnen deze automatisch aangemaakt worden bij het maken van een controller. Met de -m Modelnaam
optie erbij wordt een bijpassend database model aangemaakt. |
Browsers ondersteunen 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 @method('PUT')
toe in het formulier. |
Bij het doen van een POST, bijvoorbeeld vanuit een form, kan een 419 error ontstaan als resultaat van bescherming tegen XSS expoits. Door het toevoegen van een @csrf
statement in de view na het <form> element wordt deze fout voorkomen. |
Algemeen
Alle resources (afb, JS, etc) in de public
map. |
Routing
Routes worden gedefiniëerd in routes/web.php
|
Een route wordt gedefinieerd met Route::get('url', $data);
of Route::get('url', function():view{}));
of Route::get('/url/{variabele}', function($variabele){});
of (om functie functionname in class controllerclass aan te roepen) Route::get('/url/{variabele}', 'controllerclass@functionname');
|
Data die naar de view moet worden gestuurd moet gedaan worden in de closure functie in de routes file als return view('viewnaam', ['key'=>'value']);
|
POST of GET argumenten kunnen worden opgevraagt met de request($argumentnaam)
functie. |
Foutafhandeling (404 pagina) wordt gestart met abort(int $statuscode, string 'bericht')
functie.) |
Naast Route::get('url, $data)
zijn er ook Route::post
, Route::put
en Route::delete
|
Om toekomstbestendig te zijn kun je routes benoemen, als volgt: Route::get('/articles/{article}', 'ArticlesController@show')->name('articles.show');
In blade kan dan route worden weergegven met {{ route('articles.show', $article->id) }}
|
|
|
Artisan
Een nieuwe controller aanmaken: make:controller ControllerNaam
|
Een eloquent model aanmaken: make:model Modelnaam
|
Een migratie aanmaken: make:migration genereer_database_object
|
Een migratie toepassen: migrate
|
Een migratie rollback: migrate:rollback
|
Database legen en migraties opnieuw uitvoeren: migrate: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 {{ $object->element }}
|
Een template kan bouwen op een andere door het @extends ('bestandsnaam-zonder-extensie')
commando |
Er kan een sectie uit een template-bestand worden ingevoegd op de huidige positie met het @yield('sectienaam')
commando. |
Een sectie word gedefinieerd met @section('sectienaam')
en geëindigd met @endsection
|
Veel PHP is gewoon beschikbaar, zoals Request::path()
|
Meerdere items zijn te plaatsen als @foreach ($articles as $article) <li>Hier invoegen met {{ article->title }}</li> @endforeach
|
De asset map kan worden aagegeven met {{ asset }}submap/bestandsnaam.css
|
Foutmeldingen (zoals bij formvalidatiefouten) kunnen worden weergegeven met {{ $errors->first('veldnaam') }}
|
Alleen weergeven als een variabele/attribuut bestaat: @if ($errors->has('title))<html>@endif
|
Inline text plaatsen met conditie: {{ $errors->has('title') ? 'tekst' : '' }}
|
Bij foutmelding iets weergeven: @error('veldnaam')<b> uw tekst hier </b>@enderror
|
Een veldwaarde van een vorige submit invullen (zoals bij het falen van formvalidatie): {{ old('veldnaam') }}
|
Migrations (Database)
Een migratie is een layout voor de database, of een aanpassing daaraan. |
Bestanden met migraties staan in database/migrations
|
Voor development kunnen het beste bestaande migraties gewijzigd worden. Voor wijzigingen aan live servers maak een nieuwe migratie. |
|
|
Controllers
Controllers staan in Http/Controllers
|
Request data kan worden opgevraagd met de request('veldnaam)
functie. |
De request()
functie (zonder argumenten) retourneert een object met validate(array $opties)
functie, zoals dit: request()->validate([ 'title' => ['required', 'min:3', 'max:255'], 'excerpt' => 'required', 'body' => 'required' ]);
De validate() functie retourneert bovendien een array met valide elementen die gerefereerd kunnen worden bij verdere verwerking van de formuliergegevens. |
In controllers wordt vaak gegevens uit een DB gehaald met functies als $article = Article::findOrFail($id);
) er vanuitgaande 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(Article $article){ //code hier }
De variabelenaam moet hierbij overeenkomen met een wildcard uit de route. |
Model (Database)
Configuratie in config/database.php
en in .env
file in de root |
Eloquent modellen zijn classes die een database tabel representeren en queries kunnen uitgevoerd worden via deze class. Deze classes zijn een goede plaats voor functies om die tabel te manipuleren. Het resultaat van een query via een eloquent model is gerepresenteerd in diezelfde class. |
Indien een eloquent model is aangemaakt kun je de namespace van het eloquent model importeren zoals use App\Modelnaam
en dan Modelnaam:where('kolomnaam', $waarde)->first();
|
Queries zien eruit als: \DB::table('tabelnaam')->where('kolomnaam', $waarde)->first();
|
->firstOrFail()
haalt 1 waarde op of geeft 404. Soortgelijk voor de methode findOrFail()
. |
Eloquent modellen bevinden zich in app/
|
de all()
functie haalt alle records uit een tabel op. Zo zijn er ook de first()
functie (eerste resultaat), take(int $aantal)
(gedefinieerd aantal records ophalen) en paginate(int $aantal-per-pagina)
(gepagineerd ophalen). |
De latest('datumveld-recordnaam')
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', 'excerpt'];
Alle velden expliciet niet bewaken kan met protected $guarded = [];
|
Relaties tussen eloquent models kunnen worden gedefiniëerd in een functie in een eloquent model. Bijvoorbeeld return $this->hasMany(Article::class);
geeft een relatie aan met meerdere articles. |
Views
Views worden opgeslagen in resources/views
|
Gegenereerde resources worden opgeslagen in de resources
map. Overige in de public
map. |
In de /webpack.mix.js
wordt aangegeven wat voor bestanden gecompileerd moeten worden, zoals SASS en enkele JS bestanden. Dit wordt gedefinieerd met een regel zoals mix.sass('resources/sass/bestand.scss', 'public/doelmap');
|
Het bestand /package.json
definieert dependencies. Deze dependencies moeten met de hand geïnstalleerd 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 automatisch. |
|