Bonjour, j'ai une Api pour faire un formulaire et à chaque nom de champ elle associe la valeur correspondante au champ grâce à cette fonction :

public function add(Field $field)
  {
    // On récupère le nom du champ.
        $attr = $field->name();
    $field->setValue($this->entity->$attr()); // On assigne la valeur correspondante au champ.

    $this->fields] = $field; // On ajoute le champ passé en argument à la liste des champs.
    return $this;

         // On récupère le nom du champ.

  }

Pour le formulaire cela ressemble à ceci
QuestionFormBuilder

<?php
namespace Library\FormBuilder;

class QuestionsFormBuilder extends \Library\FormBuilder
{
  public function build()
  {
    $this->form->add(new \Library\PropositionsField(array(
                'label' => 'Propositions',
                'name' => 'reponse',
                'choix' => 'choix1',
                'validators' => array(
                  new \Library\NotNullValidator('Merci de spécifier votre choix'),
                ),
           )))
           ->add(new \Library\PropositionsField(array(
                'name' => 'reponse',
                'choix' => 'choix2',
                'validators' => array(
                  new \Library\NotNullValidator('Merci de spécifier votre choix'),
                ),
           )))
           ->add(new \Library\PropositionsField(array(
                'name' => 'reponse',
                'choix' => 'choix3',
                'validators' => array(
                  new \Library\NotNullValidator('Merci de spécifier votre choix'),
                ),
           )));
  }
}

en l’occurrence ici à chaque champ name, la valeur réponse

Comme vous pouvez le voir il y a un champs choix en dessous de name et j'aimerai associer de la même manière la valeur du champ choix

Comment dois-je procéder ?

Merci de m'éclairer

2 réponses


ClementParis
Réponse acceptée

Salut,

Je ne suis pas sûr d'avoir bien compris ce que tu voulais faire, mais ça ressemblerait peut-être à quelque chose comme ça :

public function add(Field $field)
  {
    // On récupère le nom du champ.
    $attr = $field->name();
    $field->setValue($this->entity->$attr()); // On assigne la valeur correspondante au champ.
    // On récupère le choix
    $choix = $field->choix;
    $field->setChoix($this->entity->$choix); // je suis pas sûr de la valeur entre parenthèses je ne vois pas ton code en entier

    $this->fields] = $field; // On ajoute le champ passé en argument à la liste des champs.
    return $this;

    // On récupère le nom du champ.

  }
// Et donc sur le même modèle que la fonction setValue, il te faut une fonction setChoix
public function setChoix($args) {
    // et là je sais pas ce que tu comptes faire avec
}

Après je ne sais pas comment fonctionne ta fonction setValue(), peut-être qu'elle peut gérer elle même si l'attribut à ajouter est un name, un choix au autre chose.

J'espère que ça t'éclairera ;)

PS : quand tu accèdes à une propriété qui n'est pas une méthode d'un objet, inutile de mettre des parenthèses, tu peux écrire $object->property pour les propriétés et $object->method() pour les méthodes.

jeanmaki
Auteur

Merci c'est ce que je voulais ;-)