Gestion HTTP (Request/Response)¶
SPIP 5.0 utilise désormais les objets Request et Response du composant HttpFoundation de Symfony pour gérer le cycle de vie d'une requête.
La Requête (Request)¶
L'objet Request centralise toutes les informations de la requête HTTP (GET, POST, Cookies, Headers, Session).
Accéder à la requête¶
Dans un contrôleur moderne ou un service, l'objet Request est généralement injecté. Dans un contexte legacy, vous pouvez le récupérer via le service
request_stack :
use function SpipLeague\Component\Kernel\service;
$request = service('request_stack')->getCurrentRequest();
Remplacement de _request()¶
Bien que _request() soit toujours disponible, l'utilisation de l'objet Request est recommandée :
$id = $request->query->get('id_article'); // $_GET
$titre = $request->request->get('titre'); // $_POST
La Réponse (Response)¶
Toute sortie de SPIP 5.0 devrait idéalement être encapsulée dans un objet Response.
Note : actuellement, la génération des réponses s'appuie encore largement sur le code legacy via la mise en tampon de la sortie (
ob_start/ob_end_clean). L'utilisation native et systématique des objetsResponseest un chantier en cours qui doit évoluer d'ici la sortie finale de SPIP 5.
Retourner une réponse¶
use Symfony\Component\HttpFoundation\Response;
return new Response('Contenu de la page', 200, ['Content-Type' => 'text/plain']);
Court-circuiter avec EarlyResponseException¶
Si vous devez interrompre le flux pour envoyer une réponse immédiate (par exemple une redirection ou une erreur), utilisez EarlyResponseException.
use SpipLeague\Bridge\Http\EarlyResponseException;
use Symfony\Component\HttpFoundation\RedirectResponse;
throw new EarlyResponseException(new RedirectResponse($url));
Routage¶
SPIP 5.0 définit ses routes principales via des attributs #[Route] dans SpipController.
/spip.php: gère les actions et les pages publiques./ecrire/: gère l'espace privé.
Vous pouvez définir vos propres routes Symfony dans vos plugins en utilisant les mêmes attributs, à condition que vos contrôleurs soient enregistrés comme services.