2017-08-11 4 views
0

En Symfony2, nous avons utilisé:Passage d'arguments de commande pour former le type __construct dans Symfony 3

$form = $this->createForm(new MyFormType($mySession)); 

Nous pouvons passer $ session comme arguments __construct.

Mais je ne suis pas en mesure de passer $ argument session Symfony3

J'ai essayé quelque chose comme ceci:

$form = $this->createForm(MyFormType::class, array(
     'mySession' => $mySession 
    )); 

Quelqu'un peut-il s'il vous plaît me guider? Comment résoudre ce problème Merci d'avance!

Répondre

0

Le 2ème argument de la méthode createForm est le $ data que vous avez défini. Vous pouvez lier les données à une entité en utilisant data_class dans les configureOptions de FormType comme ceci:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => MyEntity::class, 
    )); 
} 

En outre, Symfony accepte un troisième paramètre pour les options Voici les méthodes de base:

/** 
    * Creates and returns a Form instance from the type of the form. 
    * 
    * @param string $type The fully qualified class name of the form type 
    * @param mixed $data The initial data for the form 
    * @param array $options Options for the form 
    * 
    * @return Form 
    */ 
    protected function createForm($type, $data = null, array $options = array()) 
    { 
     return $this->container->get('form.factory')->create($type, $data, $options); 
    } 
0

J'espère que ce lien vous aider:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $this->yourVarableName = $options['yourVarableName']; // here you will catch your pass data 

    $builder 
     ->add('name', TextType::class) 
     ... 
     ->add('your_field_type', ChoiceType::class, array(
      'label' => 'Label Field', 
      'mapped' => false, 
      'choices' => $this->traitChoices['figure_type'] 
     )) 
     ... 
    ; 
} 

/** 
* {@inheritdoc} 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Foo\YouBundle\Entity\Goal', 
     'yourVarableName' => null, // here your data 
    )); 
} 

Lors de la création de la forme de votre contrôleur:

$goal = new Goal(); //instance of Entity 
$form = $this->createForm(GoalType::class, $goal, array(
     'action' => $this->generateUrl('profile_update'), 
     'method' => 'PUT', 
     'yourVarableName' => $yourVarableName, 
    )); 
+0

où nous devons définir "$ profile" Je suis plus récent à symfony3, donc il vaudra mieux expliquer avec un exemple. Remerciements – mobizen

+0

@mobizen Avez-vous des difficultés? –

+0

Oui, j'ai fait des modifications comme vous me l'avez dit ... Mais obtenir la même erreur "Erreur de type: trop peu d'arguments pour fonctionner FD \ PatientBundle \ Form \ GoalType :: __ construct(), 0 passé" – mobizen