Vous êtes ici : Accueil / Développement / Symfony 1.0 / Gérer les valeurs multiples avec Symfony 1.0 et les formulaires AJAX

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

Par Pierre-Yves Landuré Dernière modification 08/09/2011 18:57

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.

Ce guide est testé sur:

  • Symfony 1.0

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);