Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
77.78% |
14 / 18 |
|
33.33% |
1 / 3 |
CRAP | |
0.00% |
0 / 1 |
MaintenanceSubscriber | |
77.78% |
14 / 18 |
|
33.33% |
1 / 3 |
5.27 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
onKernelResponse | |
92.86% |
13 / 14 |
|
0.00% |
0 / 1 |
3.00 | |||
getSubscribedEvents | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace App\EventSubscriber; |
4 | |
5 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
6 | use Symfony\Component\HttpKernel\Event\ResponseEvent; |
7 | |
8 | class MaintenanceSubscriber implements EventSubscriberInterface |
9 | { |
10 | private $maintenanceActive; |
11 | |
12 | /** |
13 | * @param bool $argMaintenanceActive paramétrable dans le fichier services.yaml |
14 | */ |
15 | public function __construct($argMaintenanceActive) |
16 | { |
17 | $this->maintenanceActive = $argMaintenanceActive; |
18 | } |
19 | |
20 | public function onKernelResponse(ResponseEvent $event): void |
21 | { |
22 | // TODO : rendre la modification conditionnelle |
23 | if (!$this->maintenanceActive){ |
24 | // la maintenance est désactivé |
25 | // on s'arrête là |
26 | return; |
27 | } |
28 | |
29 | //dd($event); |
30 | // on trouve dans l'argument $event : |
31 | |
32 | // * request, avec pathInfo |
33 | // va nous servir pour tester la route et exclure certaine route |
34 | $pathInfo = $event->getRequest()->getPathInfo(); |
35 | // dd($pathInfo); // /back/main |
36 | // ? https://www.php.net/manual/fr/function.strpos.php |
37 | // si PHP 8 : https://www.php.net/manual/en/function.str-starts-with.php |
38 | // cette fonction PHP nous sert à savoir si la chaine de caractère commence par ... |
39 | if (strpos($pathInfo, "/back") === 0){ |
40 | // on est sur une route du back, on s'arrête là |
41 | return; |
42 | } |
43 | |
44 | // * response, avec le content |
45 | $response = $event->getResponse(); |
46 | $content = $response->getContent(); |
47 | // dd($content); |
48 | // on cherche l'élement HTML où se placer : <div class="container"> |
49 | // et on remplace cet élément par notre message |
50 | $modifiedContent = str_replace( |
51 | // notre recherche |
52 | '<div class="container">', |
53 | // on remplace par ... |
54 | '<div class="container"> |
55 | <div class="alert alert-danger">Maintenance prévue jeudi 25 mai à 17h00</div> |
56 | ', |
57 | // sur quel contenu |
58 | $content |
59 | ); |
60 | // il reste à mettre à jour le contenu de la response |
61 | $response->setContent($modifiedContent); |
62 | |
63 | // version en une seule instruction |
64 | /* |
65 | $event->getResponse()->setContent(str_replace( |
66 | // notre recherche |
67 | '<div class="container">', |
68 | // on remplace par ... |
69 | '<div class="container"> |
70 | <div class="alert alert-danger">Maintenance prévue jeudi 25 mai à 17h00</div> |
71 | ', |
72 | // sur quel contenu |
73 | $response->getContent() |
74 | )); |
75 | */ |
76 | |
77 | // comme la méthode renvoit void, pas de return à faire de notre coté. |
78 | } |
79 | |
80 | public static function getSubscribedEvents(): array |
81 | { |
82 | return [ |
83 | // en clé : le nom de l'évènement |
84 | // en valeur : le nom de la méthode à éxécuter |
85 | 'kernel.response' => 'onKernelResponse', |
86 | ]; |
87 | } |
88 | } |