Bonjour,
je souhaite comprendre la durée de vie des variables PHP dans symfony.
J'appelle un controller qui crée un objet qui effectue une requête REST pour récupéré un tableau de données.
Le problème c'est lorsque que j'appelle un autre controller (depuis Jquery en AJAX), je souhaite continuer à travailler avec le tableau de données récupéré mais la variable a disparu. Je dois effectuer à nouveau la requête REST, chose que je souhaite éviter.
La varibale $GLOBALS ne fonctionne pas non plus. Je ne comprends pas bien la durée de vie des variables...

En vous remerciant,

Jérémie

11 réponses


Salut,

Une variable n'est valable que pendant le traitement d'une requète. Du coup, c'est normal que lorsque tu fais ton deuxième appel ta variable est vide.

Pour remédier à ce problème, tu peux peut-être passer le tableau en paramètre de ta deuxième requête.
Tu peux aussi développer ton propre service qui construit ton tableau de cette manière tu peux l'utiliser où tu veux.

A toi de voir comment faire mais si ton tableau est volumineux, je te conseille la deuxième solution celà devrait être plus performant.

A voir d'autres avis.

Ponce
Auteur

Bonjour,
merci pour la réponse David-CCO, mais quelque soit la solution que tu proposes, je ne vois pas en quoi cela va permettre de concerver le tableau de données récupéré une première fois en REST.
Passer le tableau enb paramètre signifie que la variable contient bien le tableau de données, or à l'appel d'une autre méthode du controller, il n'y a plus de varibales.

Idem pour le service, je peux injecter l'objet qui lui-même effectue la requête REST, la varibale disparaitra quand même à l'appel de la seconde méthode du controller...

Oui j'ai mal lu ton problème désolé.
As tu regardé les sessions ?

Pourquoi tu ne veux pas réexécuter la requête ?

Ponce
Auteur

Le but est de solliciter le moins possible le serveur distant en REST. Et surtout gagner du temps...

Ponce
Auteur

Je croyais que les sessions étaient utilisées pour les comptes utilisateurs avec authentification....
On pourrait s'en servir pour autre chose alors....?

Techniquement oui tu peux stocker ce que tu veux.
Tes données sont volumineuses ?

Bonjour Ponce.
T'as demande est plutôt assez vague. Il faudrait j'imagine plus des precisions sur les besoins que tu as.
Stocké t'es valeurs en cookie ou session ou global me parrait bien plus lourd qu'un appel REST.

Soit tu fais un appel pour récupérer t'es données. Tu peux éventuellements les enregistrer en base de donnée.
Puis la prochaine fois tu pourras faire des comparaisons etc pour ne pas avoir de doublons.

Sinon le mieux serait de mettre en place un cache.

Bonjour,

Ta problématique n'est pas inhérente à Symfony mais à PHP, une variable ne dure que pendant la durée de la requête.

Si effectivement tu souhaite concerver les variables d'une requete à l'autre, il y a plusieurs possibilitéz : session, cookie ou passer les variables en paramètre d'url par exempe

Si tu donne un exemple de ton code se serait peut être plus simple pour t'orienter.

:)

Ponce
Auteur

Bonjour,
merci pour vos réponses.
En fait je cherche à optimiser la vitesse de mon script sans avoir a rappeler à chaque fois la méthode REST.
De plus les donnnées sont sensibles donc je dois sécuriser. Pas de sauvegarde complémentaire en base de données interméidiare. Je le faisais avant mais le but est de ne pas strocker les données perso sur une base en plus.

Mettre en cache servur pourrait peut être être intéressant mais je ne sais pas comment faire.
Les sessions aussi me paraisaient une bonne idée ...
Pas de trasnfert non plus via URL car données personnelles ...

J'ai trop de fichiers de code, je ne peux pas tout vous montrer c'est trop lourd ...

Ponce

Bonjour Ponce,

D'accord, je comprend ce que tu souhaite faire.

La session semble effectivement le plus adapté et c'est relativement simple à mettre en place, le cache serveur cela rajoutera de la complexité surtout si les données sont sensibles.

Ce que tu peux faire dans un 1er temps c'est essayer en session pour reproduidre l'effet voulu et voir si cela correspond à ce que tu cherche.

Bon courage :)

Pour remédier à ce problème, tu peux peut-être passer le tableau en paramètre de ta deuxième requête.
vps sunucu kiralama