Files
pta/app/Core/Controller.php
2026-08-20 13:22:49 +02:00

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;
}
}