💾 Archived View for darkblog.lhoir.me › 2023-12-27-symfony-route-rss.gmi captured on 2024-08-18 at 17:18:25. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-12-28)

-=-=-=-=-=-=-

Blog

À propos

./assets/

Symfony : Une route pour le RSS ?

2023-12-27T19:14:15Z

Si vous lisez ce blog, vous savez déjà que j'ai un projet personnel autour de l'option Tempo d'EDF. Ce projet est écrit en PHP avec le framework Symfony, que j'apprécie fortement.

Se remettre dans le tempo

J'ai créé, entre autres, un flux RSS/Atom pour suivre la couleur du lendemain, directement depuis Feeder sur mon Android. J'ai créé un fichier XML à la racine du dossier public, je l'ai référencé dans mon "heade"r afin de le faire découvrir aux navigateurs. Et comme chaque moyen de transmettre l'information Tempo, j'ai créé une page pour indiquer comment l'utiliser.

Sur cette page, j'indique également le lien vers ce flux, lien généré par le système de routing de Symfony évidemment.

J'ai cherché des références sur la manière de générer un flux RSS pour le diffuser sur un site, et la manière assez commune est la suivante :

#[Route('/path-to-feed', name: 'feed')]
public function feed(): Response

    // le fichier est généré par un service/script externe

    // on récupère le contenu du fichier xml
    $feedContent = file_get_contents('mon-flux.xml');

    // on le renvoie comme Response avec le bon header
    return new Response($feedContent, 200, [
        'Content-Type' => 'application/atom+xml',
    ]);
}

De mon point de vue, cette façon de faire manque d'audace et me semble bien lourde. Demander à php de lire un fichier que le navigateur peut interpréter, c'est dommage au niveau des performances.

D'un autre côté, je ne vois pas mettre un lien en dur directement sur la page, ou utiliser à moitié le système de routing pour générer une URL de base et d'y concaténer le nom du fichier directement dans le twig.

Alors j'ai testé une autre approche :

#[Route('/mon-flux.xml', name: 'feed')]
public function feed(): void
{}

Cette route ne fait rien, et n'est même jamais déclenchée vu que le fichier est directement à la racine du dossier public. Il suffit d'autoriser l'extension ".xml", ou de limiter l'accès à cet unique fichier, dans le ".htaccess" afin de permettre au navigateur de le trouver.

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(js|ico|gif|jpg|png|css|xml)$ %{ENV:BASE}/index.php

Alors à votre avis, bonne idée ou mauvaise pratique ?

---

Cet article vous plaît ? Vous avez envie d'échanger avec moi sur ce sujet ?

Rejoignez moi sur Mastodon

tags :

#php

#symfony

permalinks :

gemini://darkblog.lhoir.me/2023-12-27-symfony-route-rss.gmi

https://darkblog.lhoir.me/2023-12-27-symfony-route-rss.html