Outils personnels
Vous êtes ici : Accueil Symfony Gérer les valeurs multiples avec Symfony et les formulaires AJAX
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Gérer les valeurs multiples avec Symfony et les formulaires AJAX

Par Pierre-Yves Landuré - Dernière modification 20/03/2008 15:48

Si vous utilisez une requête AJAX pour soumettre vos formulaires, vous avez pu constater que les valeurs vides des champs à crochets (champs[]) sont ignorées. Cela pose problème quand vous avez plusieurs champs à crochets et que vous vous attendez à ce qu'ils aient les mêmes dimensions.

Pour contourner ce problème, il suffit de numéroter vos champs. Par exemple :

<?php echo input_field('champ-1', 'valeur 1') ?>
<?php echo input_field('champ-2', 'valeur 2') ?>
<?php echo input_field('champ-3', 'valeur 3') ?>

Par la suite, vous pouvez récupérer ces valeurs très simplement, quelque soit leur nombre avec le code suivant :

// Fetch the request parameter names.
$parameter_names = $this->getRequest()->getParameterHolder()->getNames();

// Fetch the fields named 'champ-'
// $fields is a array of field names matching 'champ-%d'.
$fields = preg_grep('/^champ-\d+$/', $parameter_names);

foreach($fields as $field_name)
{
$matches = array();
if(preg_match('/^champ-(\d+)$/', $field_name, $matches))
{
$id = $matches[1];

$object = ObjectPeer::retrieveByPk($id);
$object->setName($this->getRequestParameter($field_name));
$object->save();
}
}

Remarque: Il est tout à fait possible de récupèrer les numéro des valeurs 'champ-' en une seule fois avec la ligne :

$parameter_names = $this->getRequest()->getParameterHolder()->getNames();
$fields = preg_grep('/^champ-\d+$/', $parameter_names);
$field_ids = str_replace('champ-', '', $fields); // $fields is a array of field names matching 'champ-%d'.

Cela peut vous servir pour récupèrer les valeurs des cases à cocher cochées pour, par exemple, supprimer des objets :

ObjectPeer::doDelete($field_ids);

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio