Opdracht G4 view(...)

In elke view moeten we steeds toevoegen

require __DIR__ . "/../../app/views/parts/header.view.php";

En in elke controller

require __DIR__ . "/../../app/views/contact.view.php";

We zouden hiervoor een functie kunnen maken

view(string $view) deze functie zorgt voor de require van de juiste view. Een nadeel, maar misschien ook een voordeel hiervan is dat wanneer de require in een functie staat dat de gedefinieerde variabele niet worden meegenomen.

Dus $title die we in onze controller hebben aangemaakt. Kan dan niet meer in de view gebruikt worden. Uiteraard zijn daar mooie oplossingen voor. We kunnen aan onze view functie meerdere parameters meegeven

view(string $view, array $variabele);

Voorbeeld:

Als we onze views/parts/header.view.php willen aanroepen met een title kan dat op deze manier

view("parts/header",[
    'title'=>'Contact'
]);

Uiteraard kunnen we ook een variabele meesturen

view("parts/header", [
    'title' => $title
]);

Als we geen parameters mee willen geven kan dat ook

view('parts/navigatie-menu');

view functie

De functie view kan je zo ingewikkeld maken als je zelf wilt. Kopieƫr onderstaande code naar functions.php

function view(string $file, array $vars = [])
{
  extract($vars);
  if (file_exists(__DIR__ . "/../app/views/" . $file . ".view.php")) {

    require __DIR__ . "/../app/views/" . $file . ".view.php";
  } else {
    if (file_exists(__DIR__ . "/../src/views/" . $file . ".view.php")) {
      require __DIR__ . "/../src/views/" . $file . ".view.php";
    }else{
      dd('required view: /app/views/' . $file . ".view.php". ' not found');
    }
  }
}

Hierboven is denk ik een redelijk bruikbare functie. Let op dat je de inhoud niet hoeft te begrijpen. Functie extract($vars) zet overigens de array $vars om in losse variabele.

De globale variabele __DIR__ is de webroot directory. Indien een view niet bestaat zal er een foutmelding volgen.

Aanpassen require "...view.php"

Pas alle requires van views aan in je controllers en views. En verwijder in je controllers meteen $titel. En geef deze direct mee in de view.

Dus

view("parts/header", ['title' => 'about']);