Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-12-2007 09:19:09

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

[suggest][Zend_Controller_Request_Http]DefaultValues

Salut

Quelque suggestion sur le fonctionnement de Zend_Controller_Request_Http

Zend_Controller_Request_Http possède quelques méthodes pour récupérer des infos sur la requête de l'utilisateur genre variables de formulaire paramètres cookie etc.

le plus simple étant de faire dans son contrôleur

Code:

$this->_request->myvar;
//ou
$this->_request->get('myvar');

Zend_Controller_Request_Http possède aussi des méthode plus spécifiques pour cibler une source comme par exemple

Code:

$this->_request->getPost('myvar');

pour les variables de formulaire en mode POST
dans ce cas ces méthodes offre la possibilité de fournir des valeurs par défauts

Code:

$this->_request->getPost('myvar', 456);

voici donc ce que je propose et si cela trouve un écho ici pourquoi pas le remonter conne suggestion à Zend

1) ajouter un valeur par défaut à la méthode get comme pour getQuery getPost getParam ...

Code:

$this->_request->get('myvar', 456);

Cela rendrait les appels homogène et surtout d'avoir action qui reçoivent indifféremment leur valeur par get post param (même mélangé) avec des valeurs par défaut.

2) remplacer le fonctionnement des valeur par défaut

Code:

    public function getQuery($key = null, $default = null) 
    { 
        if (null === $key) {
            return $_GET;
        }

        return (isset($_GET[$key])) ? $_GET[$key] : $default; 
    }

par

Code:

    public function getQuery($key = null, $default = null) 
    { 
        if (null === $key) {
            $result = $_GET;
        } elseif (isset($_GET[$key])) {
            $result = $_GET[$key];
        } else {
            $result = $default;
        }
        if (isset($default )&&is_array($default )&&is_array($result)) {
            $result = array_merge_recursive($result, $default);
        }
        return $result; 
    }

Ainsi il deviens possible de récupérer les valeur d'un groupe de boite à coché ou de l'ensemble d'un formulaire en passant le tableau des valeur par défaut.

Code:

$this->_request->get('myFormVar', array(
   'name' => '',
   'date' => date('Y-m-d'),
   'options' => Array(
      'option1' => null,
      'option2' => null,
      'option3' => null,
   ));

pour un formulaire du genre

Code:

<input type="text" name="myFormVar[name]">
<input type="text" name="myFormVar[date]">
<input type="checkbox" name ="myFormVar[options][option1]" value="1">option1
<input type="checkbox" name ="myFormVar[options][option2]" value="1">option2
<input type="checkbox" name ="myFormVar[options][option3]" value="1">option3

On obtient ainsi tout le formulaire d'un coup avec tou les champs et pour chaque champs (même les bouton radio et les boites à coche) les valeur par défaut ou les valeur transmises.

Voilà
A+JYT

Hors ligne

 

#2 17-12-2007 15:24:22

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [suggest][Zend_Controller_Request_Http]DefaultValues

L'idée est pas mal mais complexe à mettre en place.
De plus, elle pose un problème de sécurité :
get() va chercher dans l'ordre : UGPCSE , avec U = user defined (setParam()).

Le problème avec ta méthode est que l'on a finalement obligatoirement un résultat, mais que l'on ne sait plus d'où il provient.
Préfère utiliser les méthodes spécifiques : getQuery (_GET), getPost (_POST), getCookie/server/env ; plutot que la raccourcie get().

C'est un peu comme $_REQUEST, il est déconseillé de l'utiliser car un paramètre POST peut écraser un GET, et dans le cas de ZF c'est le contraire ( avec get() )

Etant donné qu'il est facile d'injecter des paramètres dans une requête HTTP, il faut faire attention car on peut alors écraser une valeur ...

Hors ligne

 

#3 17-12-2007 17:12:33

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

Re: [suggest][Zend_Controller_Request_Http]DefaultValues

ce que je propose surtout c'est qu'on puisse gérer les membres d'un tableau avec un tableau de paramètre
par exemple aujourd'hui si tu fais

Code:

$options = $this->_request->getPost('options', array(
   a => false, 
   b => false, 
   c => false));

pour un formulaire comme ça

Code:

<input type="checkbox" name="options[a]" value="1">A
<input type="checkbox" name="options[b]" value="1">B
<input type="checkbox" name="options[c]" value="1">C

si dans ton form aucune boite n'est cochée tu as

$options qui vaut
   a => false,
   b => false,
   c => false

mais si a est coché alors tu as

$options qui vaut
   a => 1
et tu as perdu b et c

ce que je propose c'est d'obtenir

$options qui vaut
   a => 1,
   b => false,
   c => false

ce qui ne remets pas en question le fonctionnement actuel mais facilite la gestion des formulaires
puisque on peut alors récupérer en une fois son formulaire en donnant les valeurs par défaut et en étant sur d'avoir à l'arrivée toute les valeurs

si tu veux détecter qu'une valeur n'a pas été fourni il suffit comem aujourd'hui de ne pas mettre de valeurs par défaut. dans mon exemple précédent si tu fais

Code:

$this->_request->getPost('myFormVar', array(
   'name' => '',
   'date' => date('Y-m-d'),
   'options' => Array(
      'option1' => null,
      'option3' => null,
   ));

option2 ne sera renseigné que si l'utilisateur le renseigne dans le formulaire

quant à le faire sur le get ou sur les get Spécifique c'est juste une condition d'homogénéité.
passer ou ne pas passer de valeur par défaut à get ne change rien à ces avantages et inconvénients

ma proposition porte sur la gestion des tableau en tant que valeurs par défaut plus que de l'usage ou pas de get et getUGCSE

tel que c'est dans Zend aujourd'hui pour traiter le même cas que celui du poste précédent avec des valeur par défaut je ne peut pas regrouper mes variable de formulaire dans un tableau donc pas de myFormVar car sinon je ne peux gérer les valeurs par défaut
je ne peux pas non plus regrouper mes options dans un tableau
et je suit obligé de faire appel 5 fois à getPost alors que s'il gérait les tableau comme je le propose un seul appel suffit.

Code:

$form = $this->_request->getPost('myFormVar', array(
   'name' => '',
   'date' => date('Y-m-d'),
   'options' => Array(
      'option1' => null,
      'option2' => null,
      'option3' => null,
   ));

Code:

$form['name'] = $this->_request->getPost('name','');
$form['date'] = $this->_request->getPost('date', date('Y-m-d'));
$form['options']['option1'] = $this->_request->getPost('option1', null);
$form['options']['option2'] = $this->_request->getPost('option2', null);
$form['options']['option3'] = $this->_request->getPost('option3', null);

A+JYT

Dernière modification par sekaijin (18-12-2007 07:23:19)

Hors ligne

 

#4 17-12-2007 17:50:01

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [suggest][Zend_Controller_Request_Http]DefaultValues

Ok, j'ai du mal comprendre alors ^^

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