33 private \Twig\Loader\FilesystemLoader
$loader;
38 private \Twig\Environment
$twig;
43 private ?array
$get =
null;
62 $this->pdo = $db->getConnexion();
67 if (isset($_GET) && !empty($_GET)) {
70 if (isset($_POST) && !empty($_POST)) {
85 public function call(
string $method): mixed
87 if (!method_exists($this, $method)) {
89 http_response_code(404);
90 $template = $this->
getTwig()->load(
'errors/404.html.twig');
91 echo $template->render([
93 'title' =>
"Page non trouvée",
94 'name' =>
"error_404",
95 'description' =>
"La page ou la méthode demandée n'existe pas."
100 return $this->$method();
127 public function getLoader(): ?\Twig\Loader\FilesystemLoader
210 protected function requireAuth(
string $controller =
'',
string $method =
'', array $params = []): void
212 if (!isset($_SESSION[
'user_logged_in']) || !$_SESSION[
'user_logged_in']) {
214 if (empty($controller) && empty($method)) {
216 $redirectUrl = $_SERVER[
'REQUEST_URI'] ??
'/';
219 $redirectParams = array_merge([
'controller' => $controller,
'method' => $method], $params);
220 $redirectUrl =
'/?' . http_build_query($redirectParams);
224 if (!empty($redirectUrl)) {
225 $redirectUrlDecoded = urldecode($redirectUrl);
226 if (strpos($redirectUrlDecoded,
'://') !==
false || (strlen($redirectUrlDecoded) > 0 && $redirectUrlDecoded[0] !==
'/')) {
231 $redirectToEncoded = urlencode($redirectUrl);
234 $this->
redirectTo(
'home',
'connect', [
'redirect' => $redirectToEncoded]);
252 $sessionRole = $_SESSION[
'user_role'] ??
null;
255 $userRoleValue = (is_object($sessionRole) && property_exists($sessionRole,
'value'))
256 ? $sessionRole->value
260 $requiredRoleValue = ($requiredRole instanceof
RoleEnum)
261 ? $requiredRole->value
263 $userRole = $_SESSION[
'user_role'] ??
null;
264 $userRoleValue = $userRole instanceof
RoleEnum ? $userRole->value : $userRole;
265 $roleValue = $requiredRole instanceof
RoleEnum ? $requiredRole->value : $requiredRole;
267 if ($userRoleValue !== $roleValue) {
268 http_response_code(403);
269 $template = $this->
getTwig()->load(
'errors/403.html.twig');
270 echo $template->render([
272 'title' =>
"Erreur 403 - Accès refusé",
274 'description' =>
"Vous n'avez pas l'autorisation d'accéder à cette ressource."
291 protected function redirectTo(
string $controller,
string $method, array $params = []): void
294 'controller' => $controller,
298 if (!empty($params)) {
299 $query = array_merge($query, $params);
302 $queryString = http_build_query($query);
303 header(
'Location: /?' . $queryString);
316 http_response_code(405);
317 $template = $this->
getTwig()->load(
'errors/405.html.twig');
318 echo $template->render([
320 'title' =>
"Erreur 405 - Méthode non autorisée",
322 'description' =>
"La méthode HTTP utilisée n'est pas autorisée pour cette ressource."
341 $userRole = $_SESSION[
'user_role'] ??
null;
342 $userRoleValue = $userRole instanceof
RoleEnum ? $userRole->value : $userRole;
343 $allowedRoleValues = array_map(
function ($role) {
344 return $role instanceof
RoleEnum ? $role->value : $role;
347 if (!in_array($userRoleValue, $allowedRoleValues,
true)) {
348 http_response_code(403);
349 $template = $this->
getTwig()->load(
'errors/403.html.twig');
350 echo $template->render([
352 'title' =>
"Erreur 403 - Accès refusé",
354 'description' =>
"Vous n'avez pas l'autorisation d'accéder à cette ressource."
RoleEnum
Énumération des rôles utilisateur.
Classe de base pour tous les contrôleurs de l'application.
getPost()
Récupère les données POST.
call(string $method)
Appelle une méthode du contrôleur de façon dynamique.
__construct(\Twig\Loader\FilesystemLoader $loader, \Twig\Environment $twig)
Constructeur du contrôleur.
requireRole($requiredRole)
Exige que l'utilisateur ait un rôle spécifique.
setPDO(?PDO $pdo)
Définit la connexion PDO.
show405()
Affiche une erreur 405 Méthode non autorisée.
redirectTo(string $controller, string $method, array $params=[])
Redirige vers un contrôleur et une méthode donnés.
getGet()
Récupère les données GET.
requireAnyRole(array $allowedRoles)
Exige que l'utilisateur ait un des rôles spécifiés.
requireAuth(string $controller='', string $method='', array $params=[])
Exige que l'utilisateur soit authentifié.
setTwig(?\Twig\Environment $twig)
Définit l'environnement Twig.
getLoader()
Récupère le chargeur de templates Twig.
setPost(?array $post)
Définit les données POST.
setGet(?array $get)
Définit les données GET.
Twig Loader FilesystemLoader $loader
getPDO()
Récupère la connexion PDO.
setLoader(?\Twig\Loader\FilesystemLoader $loader)
Définit le chargeur de templates Twig.
getTwig()
Récupère l'environnement Twig.
static getInstance()
Retourne l'instance unique de la classe bd (pattern Singleton).