Salut à tous,

J'explique mon problème, j'ai plusieurs champs dans un formulaire correspondant à la récurrence d'une tâche.

J'utilise un DataTransformer pour chacun de ces champs (jour, semaine et mois).

En effet, mon champs récurrence n'est qu'un champ de type int, mais décomposer dans le formulaire en champs jour, semaine et mois. L'utilisateur ne peut remplir qu'un seul de ces champs, celui qu'il désire.

J'ai donc un tableau de int (jour, semaine, mois) qui représente la récurrence, que je convertis en int pour l'insertion en BDD dans le reverseTransform().

L'insertion des données se fait bien, mais je n'arrive pas à afficher les données, qui se passe dans la méthode transform().

Un peu d'illustrations avec le code :

Mon buildForm pour la récurrence :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class RecurrenceType extends AbstractType {
 
    public function buildForm(FormBuilder $builder, array $options) {
        $builder->add('jour', 'number', array('required' => false, 'attr' => array('size' => '1')))
                ->add('semaine', 'number', array('required' => false, 'attr' => array('size' => '1')))
                ->add('mois', 'number', array('required' => false, 'attr' => array('size' => '1')));
 
        $builder->appendClientTransformer(new RecurrenceTransformer());
    }
 
    public function buildView(FormView $view, FormInterface $form) {
        $view->set('jour', 'number')
            ->set('semaine', 'number')
            ->set('mois', 'number');
    }
 
    public function getDefaultOptions(array $options) {
        return array(
            'jour', 'number',
            'semaine', 'number',
            'mois', 'number'
        );
    }
 
    public function getParent(array $options) {
        return 'form';
    }
 
    public function getName() {
        return 'recurrence';
    }
 
}
Mon DataTransformer :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class RecurrenceTransformer implements DataTransformerInterface
{
    /**
     * Transforme de la BDD vers le formulaire
     * @see Symfony\Component\Form.DataTransformerInterface::transform()
     */
    public function transform($recurrence) {
        var_dump($recurrence);
 
        if (null === $recurrence) {
           return "";
        }
 
        return array($recurrence);
    }
 
    /**
     * Transforme une recurrence (tableau de number) en un number.
     * du formulaire vers la BDD
     * @param  recurrence $recurrence
     * @return $rec : number
     */
    public function reverseTransform($recurrence) {
        // tous les champs sauf celui rempli sont à null
        // on récupére donc le champ rempli
        foreach ($recurrence as $rec) {
            if ($rec != null)
                return $rec;
        }
 
        return null;
    }
 
}
Ici, mon var_dump m'affiche null puis la valeur que je souhaite afficher dans le champ.

Merci d'avance.

Cordialement.