36 lines
1.1 KiB
PHP
36 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Core;
|
|
|
|
/**
|
|
* Base des contrôleurs qui rendent une page HTML.
|
|
*
|
|
* Les contrôleurs d'API n'en héritent pas : ils écrivent directement leur
|
|
* réponse via JsonResponse::send() et n'ont donc aucune vue à rendre.
|
|
*/
|
|
abstract class Controller
|
|
{
|
|
/**
|
|
* Rend une vue de app/Views/ en lui exposant $data comme variables locales.
|
|
*
|
|
* @param string $view Chemin relatif sans extension, ex. « pages/planning ».
|
|
* @param array<string, mixed> $data Variables mises à disposition de la vue.
|
|
*
|
|
* @throws \RuntimeException Si le fichier de vue n'existe pas.
|
|
*/
|
|
protected function render(string $view, array $data = []): void
|
|
{
|
|
$viewFile = dirname(__DIR__) . '/Views/' . $view . '.php';
|
|
if (!is_file($viewFile)) {
|
|
throw new \RuntimeException('Vue introuvable : ' . $view);
|
|
}
|
|
|
|
// EXTR_SKIP : une clé de $data ne peut pas écraser $view ni $viewFile,
|
|
// ce qui rendrait le require imprévisible.
|
|
extract($data, EXTR_SKIP);
|
|
require $viewFile;
|
|
}
|
|
}
|