Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-03-2009 09:48:48

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

[Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Bonjour.

Comment pourrais-je faire pour "échapper" toutes les variables de ma vues?

Actuellement pour chaque variable je fais classiquement

Code:

<?php echo $this->escape($this->variable)?>

Seulement sur toutes les variables c'est laborieux....

Il y a t'il un moyen de le faire automatiquement?

Merci par avance de vos réponses.

Dernière modification par neeux (15-03-2009 09:50:57)

Hors ligne

 

#2 15-03-2009 18:47:14

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Tu peux mettre en place un filtre de vue. Il y a un exemple dans le livre 'ZF Bien programmer en PHP' (mais rien dans la doc officielle).

Hors ligne

 

#3 15-03-2009 19:41:51

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Oui j'ai vu ca dans le livre p148:

Code:

class Zend_View_Filter_EscapeFilter
{
    private $_view;
    
    public function filter($data)
    {
        return $this->_view->escape($data);
    }
    
    public function setView(Zend_View_Interface $view)
    {
        $this->_view = $view;
    }
}

Seulement ça a pour effet déchaper toute la vue... Et donc ça m'affiche tous le code html de la page...

Hors ligne

 

#4 16-03-2009 08:55:45

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Tu dois remplacer la méthode escape par un traitement spécifique sur les données potentiellement dangereuses. Un genre de strip_tags inversé par exemple où tu interdis certaines balises comme <script>.

Ou alors, tu captures la partie de la sortie qui t'intéresse avec l'output buffering et tu applique ton escape (qui n'est rien d'autre qu'un htmlspecialchar) dessus.

Il y a plein de possibilités, ça dépend de ce que tu veux faire.

Hors ligne

 

#5 16-03-2009 12:02:49

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Ce que je veux faire:

Dans une vue échaper via escape() donc htmlspecialchar tous les viariables qui lui est soumis via $this->view->mavar.

Sachant que ces variables peuvent être des string des tableaux ou des objets (par exemple le résultat d'un fetchAll)....

Dernière modification par neeux (16-03-2009 12:03:29)

Hors ligne

 

#6 16-03-2009 12:19:27

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

tu peux essayer avec array map

Code:

$func = function($value) { ....};

$vars = array_map($func, get_object_vars($this->view));

mais tu vas chercher à échaper des élément qui n'ont pas à l'être (comme les membres internet de la vue)
il y a aussi la possibilité de faire un array_map récurcif

mais c'est lourd

A+JYT

Hors ligne

 

#7 16-03-2009 13:49:36

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Voilà ce que j'ai essayé:

Code:

<?php
class Zend_View_Helper_AutoEscape {
    
    private $_view;
 
    public function setView($view)
    {
        $this->_view = $view;
    }
 
    public function autoEscape()
    {
        function escape($view, $v)
        {
            return $view->escape($v);
        }
        array_map("escape", array($this->_view),get_object_vars($this->_view));    
    }
}

Mais ca me donne ces erreurs:

Code:

Warning: htmlspecialchars() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs/library/Zend/View/Abstract.php on line 837

Fatal error: Call to a member function escape() on a non-object in /Applications/MAMP/htdocs/application/default/views/helpers/AutoEscape.php on line 15

Hors ligne

 

#8 16-03-2009 14:06:17

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

je crois que c'est un truc du genre

Code:

array_map(array("escape", $this->_view),get_object_vars($this->_view));

qu'il faut écrire pour un appel de méthode

Hors ligne

 

#9 16-03-2009 14:27:09

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Toujours pas...

Code:

Warning: array_map() [function.array-map]: The first argument, 'Array', should be either NULL or a valid callback in /Applications/MAMP/htdocs/application/default/views/helpers/AutoEscape.php on line 18

Hors ligne

 

#10 17-03-2009 19:08:52

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Essaie :

Code:

array_map('htmlspecialchars', get_object_vars($this->_view));

Hors ligne

 

#11 17-03-2009 19:11:04

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Ou mieux encore pour éviter les membres non public :

Code:

array_map('htmlspecialchars', $this->_view->getVars());

Hors ligne

 

#12 17-03-2009 20:09:31

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

J'ai l'impression de tourner en rond lol...
Voilà ce que ça me donne:

Code:

Warning: htmlspecialchars() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs/application/default/views/helpers/AutoEscape.php on line 19

Hors ligne

 

#13 17-03-2009 20:27:46

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Tu dois avoir des objets dans les variables de ta vue. Il faut 'envelopper' htmlspecialchars dans une fonction qui teste si l'argument est bien une chaine.

Hors ligne

 

#14 17-03-2009 20:50:08

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

il y a une autre solution passer par un ittérateur
tu peux lire
http://julien-pauli.developpez.com/tutoriels/php/spl/
et plus particulièrement la partie RecursiveIterator

de toute façon que ce soit avec un array map ou avec un itérateur il faut parcourir le tableau

et merci à julien
A+JYT

Hors ligne

 

#15 17-03-2009 23:45:32

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Merci de vos réponse... Je vais tester tous ça demain

Finalement j'ai peur d'arriver à créer un  bazooka pour écraser une mouche.....

Juste par curiosité.. Le code fournit dans Le livre "ZF Bien programmer en PHP" (3 eme message de ce sujet), est il normal qu'en l'utilisant ce soit toute ma vue qui soit échapper et que donc le code html soit affiché??

Est ce moi qui est mal compris ???

Hors ligne

 

#16 18-03-2009 10:30:32

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

neeux a écrit:

Juste par curiosité.. Le code fournit dans Le livre "ZF Bien programmer en PHP" (3 eme message de ce sujet), est il normal qu'en l'utilisant ce soit toute ma vue qui soit échapper et que donc le code html soit affiché??

Oui, l'exemple est un peu bidon. C'est pas évident de trouver une utilisation concrète de ces filtres de vue...

Hors ligne

 

#17 18-03-2009 10:53:28

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Ça me rassure lol...

Et sinon dans une autre voie: Il serait bien que dans une future version on puisse appliqué une fonction au résultat d'un fetchAll, fetchRow et leur copains..

Je m'explique: (Je viens d'y penser au vol... Je dis peut être une énorme débilité...)

Au lieu de faire un:

Code:

$this->fetchAll($select)

Pouvoir faire un

Code:

$this->fetchAll($select, Mafunction())

Avec ma fonction pouvant être un échappement des résultats par exemple........

Ce qui permettrais de soulager la vue de fonctions importantes de sécurités....  Ce serait surtout intéressant pour les projets ou des designers manipulent les vues.... On éviterait le risque de voir des $this->escape() qui disparaissent par maladresse....

Hors ligne

 

#18 18-03-2009 10:59:26

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Salut,

Ceci ne répond pas au modèle MVC.

Le fetchAll() sera présent dans le modèle, les contrôles et formatages des informations sont du ressort du controlleur et de la vue.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#19 18-03-2009 11:35:45

neeux
Membre
Date d'inscription: 03-07-2008
Messages: 29

Re: [Zend_View][1.7]$this->escape() sur toutes les variables de la vue..

Oui sur le principe je suis d'accord...

Mais le fetchAll peut dans certain cas être utilisé dans le contrôleur... Mais bon c'est vrai que ca ne répond pas au MVC comme tu l'a très justement rappelé..

Néanmoins je trouve que des fonction importante dans une vue (comme $this->escape()), ce n'est pas une très bonne pratique sur un projet où les vues sont manipuler par des designers.... (Et ce doit être dans ce cas que es moteurs de template comme smarty doivent prendre tous leurs sens... )

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages