Gérer les valeurs multiples avec Symfony 1.0 et les formulaires AJAX
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);