Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2007, 18h12   #1
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 3
Points : 3
Envoyer un message via MSN à zonzon
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 :
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 :
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 :
1
2
3
4
5
 
$field1 = $this->_getParam('field1');
$field2 = $this->_getParam('field2');
..........
$field_X = $this->_getParam('field_X');
merci à tous
Bruno
zonzon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 09h06   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 10h55   #3
Futur Membre du Club
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2007
Messages : 25
Points : 18
Points : 18
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 :
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 :
1
2
3
4
 
<input name="data[nom]" id="nom" />
<input name="data[prenom]" id="prenom" />
......
robin_liu79 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 10h12   #4
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
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 :
$client = $this->_getParam('client');
personellement je n'aime pas utiliser les tableau pour mes objets je fais donc
Code :
$client = (object)$this->_getParam('client');
ainsi $client est un objet que je peux manipuler sans difficulté
Code :
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 :
$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 :
$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 :
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 :
<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 :
<input name="client[checkgroup][box1]" value="toto" type="checkbox"/>
ou
Code :
<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 :
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
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web