src/Service/RouterDecorator.php line 120

Open in your IDE?
  1. <?php
  2. // Classe décorateur du routeur de Symfony, pour lui imposer un autre générateur d'URL
  3. // selon https://stackoverflow.com/questions/55468435/symfony-4-2-how-to-decorate-the-urlgenerator
  4. // et https://stackoverflow.com/questions/58268697/symfony-4-i-decorated-urlgeneratorinterface-but-its-not-used-it-uses-compile
  5. // Voir aussi \applicationPAA_S4\config\services.yaml
  6. namespace App\Service;
  7. use Symfony\Component\Routing\RequestContext;
  8. use Symfony\Component\Routing\RouterInterface;
  9. class RouterDecorator implements RouterInterface
  10. {
  11.     /**
  12.      * @var RouterInterface
  13.      */
  14.     private $router;
  15.     // LG 20240409
  16.     public function getRouter() {
  17.         return $this->router ;
  18.     }
  19.     /**
  20.      * MyRouter constructor.
  21.      * @param RouterInterface $router
  22.      */
  23.     public function __construct(RouterInterface $router)
  24.     {
  25.         $this->router $router;
  26.     }
  27.     
  28. //    public function getGenerator() {
  29. //        if (null !== $this->generator) {
  30. //            return $this->generator;
  31. //        }
  32. //
  33. //        $this->generator = new \App\PaaBundle\Component\UrlGenerator2($this->getRouteCollection(), $this->context, $this->logger, $this->defaultLocale) ;
  34. //        
  35. //        return $this->generator;
  36. //    }
  37.         
  38.     /**
  39.      * @inheritdoc
  40.      */
  41.     public function generate($name$parameters = [], $referenceType self::ABSOLUTE_PATH)
  42.     {
  43.         $url $this->router->generate($name$parameters$referenceType);
  44. /* ATTENTION, la méthode generate n’est pas encore fiabilisée
  45.  * , en particulier elle peut encore changer des URLs émises par Symfony pour son propre usage.
  46.  * Il faut recenser ces URLS par l'utilisation d'une trace.
  47.  * Ou alors s'assurer que toutes les routes de PAA soient préfixées par PAA_ et s'appuyer sur $name pour faire le test
  48.  * 
  49.  * ATTENTION aussi à la génération d'URLs absolues : ce cas n' est pas encore géré
  50.  */
  51.         // Selon https://stackoverflow.com/questions/46021326/symfony-3-3-custom-router
  52.         $context $this->getContext() ;
  53. //echo $context->baseUrl ;
  54. //echo $context->pathInfo ;
  55. //echo $context->method ;
  56. //echo $context->host ;
  57. //echo $context->scheme ;
  58. //echo $context->httpPort ;
  59. //echo $context->httpsPort ;
  60. //echo $context->queryString ;
  61. //echo $context->parameters ;
  62.         if (substr($name01) == "_") {
  63.             // nom système de Symfony : RAS
  64. //        } else if ($name == "fos_user_security_logout" || $url == "/logout") {
  65. //            // Ce nom est système pour FOS_USER_BUNDLE : ne pas le changer
  66.         } else if (strpos($context->getPathInfo(), "/DB/") === FALSE) {
  67.             // Cette URL ne contient pas de référence à une base de données
  68.         } else {
  69.             if (!(strpos($url"www") === false) || !(strpos($url"http") === false)) {
  70.                 // URL absolue
  71.                 throw new \Exception("RouterDecorator.generate : le cas des URLs absolues n'est pas encore géré") ;
  72.             }
  73.             $laPathItems explode("/"$context->getPathInfo()) ;
  74.             $laUrlItems explode("/"$url) ;
  75.             if ($laPathItems[1] === "DB" && $laUrlItems[1] !== "DB") {
  76.                 $url "/DB/" $laPathItems[2] . $url ;
  77.             }
  78.         }
  79.         
  80.         return $url ;
  81.     }
  82.     /**
  83.      * @inheritdoc
  84.      */
  85.     public function setContext(RequestContext $context)
  86.     {
  87.         $this->router->setContext($context);
  88.     }
  89.     /**
  90.      * @inheritdoc
  91.      */
  92.     public function getContext()
  93.     {
  94.         return $this->router->getContext();
  95.     }
  96.     /**
  97.      * @inheritdoc
  98.      */
  99.     public function getRouteCollection()
  100.     {
  101.         return $this->router->getRouteCollection();
  102.     }
  103.     /**
  104.      * @inheritdoc
  105.      */
  106.     public function match($pathinfo)
  107.     {
  108.         return $this->router->match($pathinfo);
  109.     }
  110. }