Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
77.78% covered (warning)
77.78%
14 / 18
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
MaintenanceSubscriber
77.78% covered (warning)
77.78%
14 / 18
33.33% covered (danger)
33.33%
1 / 3
5.27
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onKernelResponse
92.86% covered (success)
92.86%
13 / 14
0.00% covered (danger)
0.00%
0 / 1
3.00
 getSubscribedEvents
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\EventSubscriber;
4
5use Symfony\Component\EventDispatcher\EventSubscriberInterface;
6use Symfony\Component\HttpKernel\Event\ResponseEvent;
7
8class 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}