src/Controller/BlogueController.php line 60

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use App\Entity\Article;
  10. use Symfony\Component\DomCrawler\Crawler;
  11. class BlogueController extends AbstractController
  12. {
  13.     private $site;
  14.     private $locale;
  15.     public function __construct(RequestStack $requestStack)
  16.     {
  17.         $request $requestStack->getCurrentRequest();
  18.         $this->site $request->getHost();
  19.         $this->locale $request->attributes->get('_locale''fr');
  20.     }
  21.     /**
  22.      * @Route("/", name="app_blogue_fr")
  23.      * @Route("/{_locale}", name="app_blogue", defaults={"_locale"="fr"}, requirements={"_locale"="fr|en"})
  24.      */
  25.     public function index(PaginatorInterface $paginatorRequest $request): Response
  26.     {
  27.         // Récupérer l'ID du site à partir du mappage
  28.         $siteId $this->getParameter('site_mapping')[$this->site];
  29.         // Récupérer les articles du site spécifique en utilisant l'ID du site
  30.         $articles $this->getDoctrine()->getRepository(Article::class)->listeArticle($siteId$this->locale);;
  31.         $pagination $paginator->paginate(
  32.             $articles,
  33.             $request->query->getInt('page'1),
  34.             10 // Nombre d'éléments par page
  35.         );
  36.         // Afficher les articles dans la vue
  37.         return $this->render("blogue/index.html.twig", [
  38.             'articles' => $pagination,
  39.             'site' => $this->site,
  40.             '_locale' => $this->locale
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/{slug}", name="url_article_fr")
  45.      * @Route("/{_locale}/{slug}", name="url_article", requirements={"_locale"="fr|en"})
  46.      */
  47.     public function detailArticle($slugRequest $request)
  48.     {
  49.         // Récupérer l'ID du site à partir du mappage
  50.         $siteId $this->getParameter('site_mapping')[$this->site];
  51.         $baseUrl $this->getParameter('cms_url');
  52.         // Récupérer les articles du site spécifique en utilisant l'ID du site
  53.         $article $this->getDoctrine()->getRepository(Article::class)->findOneBy(['type' => 'article''userId' => $siteId'slug' => $slug'locale' => $this->locale]);
  54.         $crawler = new Crawler($article->getContent());
  55.         $newContent $this->convertContent($crawler$baseUrl)->html();
  56.         $article->setContent($newContent);
  57.         //Liste des derniers articles
  58.         $articles $this->getDoctrine()->getRepository(Article::class)->listeArticle($siteId$this->locale3$article);
  59.         // Afficher les articles dans la vue
  60.         return $this->render("blogue/detail.html.twig", [
  61.             'article' => $article,
  62.             'site' => $this->site,
  63.             '_locale' => $this->locale,
  64.             'articles' => $articles
  65.         ]);
  66.     }
  67.     public function convertContent($crawler$baseUrl)
  68.     {
  69.         // Sélectionnez tous les éléments <img>
  70.         $images $crawler->filterXPath('//img');
  71.         foreach ($images as $image) {
  72.             $imageSrc $image->getAttribute('src');
  73.             // Vérifiez si l'URL de l'image est relative
  74.             if (!filter_var($imageSrcFILTER_VALIDATE_URL)) {
  75.                 // Construisez l'URL absolue en ajoutant le chemin de l'image à l'URL de base
  76.                 $absoluteUrl rtrim($baseUrl'/') . '/' ltrim($imageSrc'/');
  77.                 // Modifiez l'attribut src de l'image avec l'URL absolue
  78.                 $image->setAttribute('src'$absoluteUrl);
  79.             }
  80.         }
  81.         return $crawler;
  82.     }
  83. }