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