aboutsummaryrefslogtreecommitdiff
path: root/public/index.php
blob: cdcfd34825ac40629f982de9ceb610416db0ae12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
// public/index/php

/* plan d'action pour "symfonyfier" le site
A - 
    1/ de vrais contrôleurs: classes et méthodes prenant une requête en entrée et retournant une réponse
    (début de séparation contrôleurs et classes métier)
    2/ routeur structuré: méthodes GET et POST, content-type, admin
    3/ routeur amélioré: pré-routage avec méthodes HTTP: GET, HEAD, POST, PUT, PATCH, DELETE, etc
    4/ réécriture avec les classes Request et Response sans toucher les liens
    5/ http-foundation possède aussi une classe Session. intéressant!
B - 
    1/ passer à des chemins modernes "ciblant des ressources" genre /chemin/de/la/page
        le mode modification de page doit thérioquement être appelé comme ça: /chemin/de/la/page/modif_page
        apparemment, le from=nom_page pour les formulaires ne se fait pas...
    2/ utiliser le routeur de symfony: nécéssite que tous les contrôleurs soient des classes avec un namespace */

declare(strict_types=1);

use Symfony\Component\HttpFoundation\Request;


/* -- partie 1: prétraitement --
code à exécuter pour toutes requêtes */

// une nouvelle classe? taper: composer dump-autoload -o
require "../vendor/autoload.php";

// configuration possible par l'utilisateur
Config::load('../config/config.ini');

// générateur de liens
URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443
URL::setPort(Config::$port);
URL::setHost($_SERVER['HTTP_HOST'] . Config::$index_path);

// $entityManager
require '../src/model/doctrine-bootstrap.php'; // isDevMode est sur "true", DSN à adapter

// session
require('../src/service/session.php');
startSession($entityManager);

// tests de bon fonctionnement
if(IS_ADMIN){
    Installation::phpDependancies();
    Installation::checkFilesAndFoldersRights();
}
// remplit la BDD initiale, ne fonctionne que si la BDD est vide
DatabaseSettingUp::run($entityManager);

$request = Request::createFromGlobals();


/* -- partie 2: routage et contrôleurs -- */

define('CURRENT_PAGE', htmlspecialchars($request->query->get('page') ?? ''));

//Router::dispatch($request, $entityManager);
//$response = Router::dispatch($request, $entityManager);

$router = new Router($request, $entityManager);
$response = $router->dispatch();
$response->send();

// gestion des erreurs
/*try{
    $response = $router->dispatch();
}
catch(Throwable $e){
    $response = new JsonResponse([
        'success' => false,
        'message' => 'Erreur interne'
    ], 500);
    // mieux utiliser une classe ErrorHandler qui gère les différents types d'erreur
}
$response->send();*/