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

Zend Framework PHP Discussion :

Noms de champs dans les forms


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut Noms de champs dans les forms
    Salut à tous,

    peut etre que ma question n'est pas ciblée à 100% sur le Zend_Framework, mais peut-être que l'utilisation du framework aura une décision finale sur la manière que je procèderai...

    Est-il avantageux de nommer les champs d'un form du genre:
    form[field1] , form[field2]

    Avantage en PHP (Adapté en Zend):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		$form = $this->_getParam('form');
     
    //accès direct et rapide :
     
    		echo $form[field1] . "\n";
    		echo $form[field2] . "\n";
    est-ce que cela est conseillé ou déconseillé?
    est-ce que ca cause probleme en javascript?

    est-ce une méthode qui s'intègre mieux avec les Zend_Filter_Input? comme en facilitant le mapping de mon tableau associatif $form passé à la routine de validation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $validators = array(			
    			'field1' => array(
    				'Alpha', 
    				'presence' => 'required' 
    			),
     
    			'field2'	=> array(
    				'Alnum',
    				presence => 'required'
    			),
     
    ....
     
                   $input = new Zend_Filter_Input($filters, $validators, $form, $options);

    Bref, j'aimerais avoir vos opinions ou suggestions rapidement, afin de partir mon premier formulaire de mon systeme sur une base solide!

    à tenir en compte: rapidité de développement, de validation totu en restant flexible le plus possible.... car je trouve un peu irritant de constament faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $field1 = $this->_getParam('field1');
    $field2 = $this->_getParam('field2');
    ..........
    $field_X = $this->_getParam('field_X');
    merci à tous
    Bruno

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    D'un point de vue sécurité, il est plus intéressant de brouiller les pistes au maximum, donc de ne pas avoir de noms figés mais plutôt dynamiques. Cela ne change pas grand chose côté PHP (utilisation de variables de session plutôt que de noms fixes) mais côté HTML cela devrait être assez efficace.

    Désolé de ne pas trop répondre à ta question

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    vi, c'est bien, pourquoi pas

    je l'ai utilisé dans mon démo http://lingping.info/zf. en fait, c'est post, utilise plutôt getPost
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
        public function addAction()
    	{
    		$Agent = new Agent();
    		if ($this->_request->isPost()) {
    			$post = $this->_request->getPost();
    			$tab = explode('/',$post["data"]["date_entree"]);
    			$post["data"]["date_entree"] = $tab[2]."-".$tab[1]."-".$tab[0];
     
    			if($post["data"]["date_sortie"])
    			{
    				$tab = explode('/',$post["data"]["date_sortie"]);
    				$post["data"]["date_sortie"] = $tab[2]."-".$tab[1]."-".$tab[0];
    			}
    			else
    			{
    				$post["data"]["date_sortie"] = null;
    			}
     
    			foreach($post["data"] as $key=>$value)
    			{
    				$post["data"][$key] = $this->filterData->filter($value);
    			}
     
    			if($id = $Agent->insert($post["data"]))
    			{
    				die(Zend_Json_Encoder::encode(array("OK","L'insertion est bien validée.",$id)));
    			}
    			else
    			{
    				die(Zend_Json_Encoder::encode(array("KO","Erreur saisie.")));
    			}
    		}        
    		else 
    		{
    			$flag_cached = $this->view->getEngine()->is_cached("index/add.html",$this->_cache_id);
    			if ( !$flag_cached )
    			{
    				$this->view->titre_form = 'Ajouter un nouveau';
    		 		$this->view->action = "add";
    		 		$this->view->ParentAgent = $Agent->fetchAll(NULL,"nom")->toArray();
    			}
    			else 
    			{
    				$this->view->setDebug("<font color=green>cached !!!</font>");
    			}
    		}
            // additional view fields required by form
    	}
    et dans la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input name="data[nom]" id="nom" />
    <input name="data[prenom]" id="prenom" />
    ......

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    que si que si tu peut très facilement récupérer tes tableaux
    il arrive souvent dans un formulaire de véhiculer des informations qui concerne directement l'objet que l'on manipule et d'autre qui sont plutôt du contexte

    par exemple un formulaire pour éditer un objet client et un champ hidden qui dit si c'est un nouveau client ou une mise à jour

    dans ce cas il est pratique d'utiliser les nom comme
    method
    et pour les info client
    client[name]
    client[phone]

    quant au check box pas de problème
    client[checkgroup][valeur1]
    client[checkgroup][valeur2]
    etc.
    du coup tu peux très bien récupérer ton client d'une seule opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client = $this->_getParam('client');
    personellement je n'aime pas utiliser les tableau pour mes objets je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client = (object)$this->_getParam('client');
    ainsi $client est un objet que je peux manipuler sans difficulté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $client->name;
    $client->phone;
    foreach ($client->checkgroup as ckeckname => $value) {
      do();
    }
    je n'hésite pas nom plus à mettre plusieurs objets dans un formulaire
    par exemple j'ai des clients qui on une adresse
    mais j'ai aussi des partenaires qui ont une adresse et des fournisseur
    un adresse est donc quelque chose d'indépendant d'un client donc dans mon formulaire client je mes les champs
    client[name] client[firstname] etc et address[street] address[city]

    ça facilite grandement la lecture du formulaire. et son traitement.

    j'ai des collègues qui ont pris un convention
    oClient sera un objet client alors que aClient sera un tableau
    ainsi il ont écrit une methode qui récupère un élément du formulaire en fonction de sont type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client = $this->_getParam('Client');
    retournera un objet si oClient est dans les variables du formulaire
    et retournera un tableau si aClient est présent
    pour cela il suffit de surcharger _getParam()

    mais on peut aller encore plus loin en fournissant un constructeur adapté pour ses objet métier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client = $this->_getParam('Client', 'Myapp_Model_Client');
    qui me retourne un objet de la classe Myapp_Model_Client
    il ne me reste qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $method= $this->_getParam('method');
    $client = $this->_getParam('Client', 'Myapp_Model_Client');
    if ($client->isValid()) {
       $client->save($method);
    }
    Alors oui moi je dis fonce sur cette approche elle à pleins d'avantage.

    par contre le code html du formulaire n'est pas exploitable avec d'autre langage que php par exemple c'est plus difficile de prendre le formulaire tel quel pour porter l'appli en java

    il faut aussi penser à utiliser des id sur les input de ton formulaire. quand tu veux les manipuler en javascript. en effet sans id le name de l'input est suffisant pour le manipuler. mais en javascript client[name] est un tableau
    par habitude je fai sainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id='client_name' type='text' name='client[name]' value='' />
    ça permet d'avoir un ensemble cohérent et de ne pas mélanger les noms de variable de formulaire qui sont à destination du serveur des objets d'édition qui sont à destination du navigateur

    A+JYT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="client[checkgroup][box1]" value="toto" type="checkbox"/>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="client[checkgroup][]" value="toto" type="checkbox"/>
    dans le premier cas tu obtiends une hashtable les valeurs peuvent donc être identiques client[options][emailInfo]=1 et client[options][newsletter] = 1
    dans le second un tableau indicé les valeur son nécessairement différentes
    client[options][]=emailInfo et client[options][]=newsletter

    il est possible d'imbriquer autant de niveau que l'on veut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <input name="client[person][name]"            value="Sekaijin"   type="text" />
    <input name="client[person][firstname]"       value="Jean-Yves"  type="text" />
    <input name="client[person][bird]"            value="08/12/1948" type="text" />
    <input name="client[address][street][number]" value="6"          type="text" />
    <select name="client[address][street][type]">
       <option value="rue" selected="selected">rue</option>
       <option value="bd">boulevard</option>
       <option value="imp">impasse</option>
    </select>
    <input name="client[address][street][name]" value="Beethoven"       type="text" />
    <input name="client[address][postnnumber]"  value="12130"           type="text" />
    <input name="client[address][city]"         value="Sainte Afrique"  type="text" />
    <input name="client[options][emailInfo]"    value="1"               type="checkbox" checked="checked" />
    <input name="client[options][newsletter]"   value="1"               type="checkbox" />
    mais je n'aime pas trop multiplier ainsi les niveaux ça de rends que très rarement les choses plus simples
    A+JYT

Discussions similaires

  1. Récupérer les noms des champs dans une requête
    Par Nerziel dans le forum Général Python
    Réponses: 1
    Dernier message: 14/09/2009, 11h29
  2. masqué la barre qui contient les nom des champs dans dbgrid
    Par kroma23 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/09/2008, 12h57
  3. Réponses: 3
    Dernier message: 11/07/2007, 10h10
  4. Facilité de tester les types de champs dans un FORM ?
    Par shadeoner dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2006, 20h49
  5. Réponses: 7
    Dernier message: 04/11/2004, 12h20

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