Refactoring to MVC
Aan het eind van deze les heb je een control file en heb je de complete routing voor het object links opgezet. De index routing is ingevuld en werkt.
We gaan onze code een beetje opnieuw bouwen, dit heet ook wel refacturing. Het doel is dat we onze code opschonen en het MVC model wat duidelijker vorm gevne in onze code. Hierdoor wordt code overzichtlijker en sluiten we beter aan bij de Laravel standaard.
Routing and controllers
Tot nu te hebben we onze routing opgezet en in de routing hebben we tevens de controls opgenomen. Bijvoobeeld bij het toevoegen van een nieuwe link hebben we alle code in de routing file gestopt. Dit werkt maar is op den duur, als onze code meer wordt niet meer overzichtelijk. In onze routing houden we alleen de routing bij en de control-code gaat in een aparte file. Hiermee gaan we een duidelijk onderscheid maken tussen de routing en de controls.
We kunnen al onze CRUD routes voor het object Link in één keer aanpassen met één route:
Route::resource('links','LinkController');
Plaats deze route en plaats de andere routes voorlopig in commentaar.
Deze ene regel zorgt voor routes naar alle CRUD-functies:
Method | URI | Action (function in controller) | functie |
GET | /links | index | standaard pagina voor indes |
GET | /links/create | create | create form |
POST | /links | store | create form post |
GET | /links/{id} | show (één item) | laat één item zien |
GET | /links/{id}/edit | edit | edit form |
PUT/PATCH | /links/{id} | update | edit form post |
DELETE | /links/{id} | destroy | delete |
(zie ook https://laravel.com/docs/6.x/controllers)
In de directory app/http/Controllers staan al onze controlers en we maken eneeen nieuwe file en noemen die LinkController.php
De routing zal naar deze file verwijzen. In deze php file maken we de volgende 'standaard' code:
<?php
namespace App\Http\Controllers;
use App\Link;
use Illuminate\Http\Request;
class LinkController extends Controller
{
protected function index (){
//
}
protected function create(){
//
}
public function edit($id){
//
}
public function show($id){
//
}
public function update(Request $request, $id) {
//
}
protected function store(Request $request){
//
}
protected function destroy($del_id){
//
}
}
Nu hebben we alle standaard methods voor de routing, we moeten nu alleen de code nog per functie invullen.
Plaats in elke control een echo die laat zien dat in welke control je zit. Dus in de index control plaats je echo "index";
, in de create control plaats je echo "create";
, etc.
Check: Test alle GET functies (zie tabel hierboven) en check of de juiste controls worden aangeroepen.
Als alles goed werkt dan kunnen we de code bij de index control invullen. Die hadden we al eerder gemaakt, maar die stond in de routing. Copieer deze code naar de index control.
Als dit werkt gaan we de andere controls later invullen; we gaan eerst de templates aanpassen zodat alles er iets beter uit ziet.
--