Delete
We gaan de Delete van de CRUD nu toevoegen.
Opdracht
Ga naar de file link.blade.php waarin we het overzicht van de links in een tabel afdrukken en voeg een kolom toe aan het eind van de regels. Zet in deze kolom:
<a href="/links/del/{{ $link->id }}"> Delete </a>
of
<form action="{{ url('/links/del' , $link->id ) }}" method="GET">
{{ csrf_field() }}
<button>Delete</button>
</form>
Beide doen hetzelfde, of moeten hetzelfde gaan doen. De eerste werkt via een delete link en de tweede werkt via een delete button. Het verschil is vooral grafisch (GUI).
In het form en in de link wordt het ID van de regel die moet worden verwijderd meegegeven aan de url.
Routing en destroy()
In de routing krijgen we de url /links/del/12 waarbij 12 het ID is van de regel die verwijderd moet worden. De routering wordt opgezet en het ID wordt als parameter van de functie gedefinieerd. Daarna kunnen we met een eenvoudig Laravel statement de regel uit de tabel halen:
Route::get('/links/del/{id}', function ($del_id) {
\App\Link::destroy($del_id);
return redirect('/links');
});
Je hebt nu een delete (destroy) gemaakt.
Filter
We hebben nu een 'probleem' dat de functie om een regel te verwijderen rechtstreeks vanaf de command url kan worden aangeroepen. Laten we er in ieder geval voor zorgen dat de input wordt gefilterd (=veilig programmeren!).
...
...
})->where('number', '[0-9]+');
Voeg dit toe aan de bovenstaande routering, zodat je alleen numerieke waarden accepteert. Probeer of het werkt.