IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Le retour de mes méthodes est auto-echapé dans le template, pourquoi ?


Sujet :

Symfony PHP

  1. #1
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut Le retour de mes méthodes est auto-echapé dans le template, pourquoi ?
    Salut,

    A moi de faire appel à vous pour un truc un peu dingue.

    J'écris un ensemble de class qui devrait devenir un plugin, peut-être, si j'arrive à résoudre ce problème, entre autre.

    J'ai dans mes objets des méthodes sensées être utilisée depuis le template et retourner du code XHTML. Mais, cela ne ce passe pas comme je le voudrai...

    La class de base, pour les tests, je l'ai simplifiée à sa plus simple expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class testifolie
    {
        public  function render()
        {
            return sprintf('<h1>retour du static</h1>');
        }
    }
    On peut difficilement imaginer un code plus simple et limpide.

    L'action qui est donc une méthode de sfAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class testActions extends sfActions
    {
      public function executeIndex(sfWebRequest $request)
      {
        $this->testifolie = new testifolie();
      }
    }
    Ici aussi, j'ai simplifié le code au maximum

    Et enfin le template, (le layout est celui de base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h1>go to essai 2</h1>
    <?php echo $testifolie->render() ?>
    Et ce qui je récupère à l'affichage dans l'explorateur (FF) :
    go to essai 2
    <h1>retour du static</h1>
    Le code XHTML qui a été généré, un peu simplifié, sans le header et la partie du code de la barre de debug.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      <body>
     
        <h1>go to essai 2</h1>
    &lt;h1&gt;render OK&lt;/h1&gt;&lt;h3&gt;coucou&lt;/h3&gt;<h2>viva</h2>&lt;h1&gt;retour du static&lt;/h1&gt;
    La question est simple : qui donc a échapé le retour de ma méthode ?

    Je prend toutes les idées, les plus folles, j'en ai testé un paquet, il me manque la bonne

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Points : 234
    Points
    234
    Par défaut
    Est-ce que ça n'aurait pas un lien avec la configuration dans frontend/config/settings.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    all:
      .settings:
        escaping_strategy: true
        escaping_method:   ESC_SPECIALCHARS
    Qui ajoute htmlspecialchars() sur toutes les variables par défaut. Non ?

    Source

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Bonne pioche.

    Sauf que la réponse (pas la tienne) ne me satisfait absolument pas.

    J'avais considéré cette solution comme ne valent pas la peine d'être testée, a tord, pour deux raisons : c'est une fonction calculée, donc avec un résultat imprévisible ; il existe des objets qui retourne du code XHTML et ne sons pas echapé (sfWidget dans les sfForm).

    La même méthode passée en static et utilisée une fois déclarée et l'autre en static marche (non échapée) quant elle est appelée en static.

    Si je renvoie le résultat de la fonction par un die (beurk) et non par un return, il s'affiche non échapé.

    Donc, les objets passé dans la couche contrôleur et envoyé au template sont encapsulé et le retour des méthodes appelées sont échapées. Bon, faut que je trouve un moyen pour contourner cette chose sans avoir à désactiver l'échappement pour le reste.

Discussions similaires

  1. [Smarty] Pourquoi le php n'est pas recommandé dans les templates ?
    Par SlymDesign dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 10/10/2007, 11h21
  2. [JNI] Java ne trouve pas mes méthodes natives
    Par carotte31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/06/2006, 21h47
  3. [Copie de Fichier] Quelle méthode est la plus rapide ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 04/05/2006, 13h59
  4. Un de mes ordi est invisible dans le voisinnage réseau
    Par beegees dans le forum Administration
    Réponses: 3
    Dernier message: 10/12/2005, 13h34
  5. Retour de la méthode TransferText
    Par Tatoupi dans le forum Access
    Réponses: 1
    Dernier message: 05/12/2005, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo