Skip to main content

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','LinksController');

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) of gebruik het commando:

 php artisan route:list

In de directory app/http/Controllers staan al onze controlers en we maken een nieuwe file en noemen die LinkController.php

Tip: er is ook een artisan command om een standaard controller file te maken:

php artisan make:controller LinksController

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.

--