2017-07-26 6 views
1

Ich stehe vor einem Problem mit Symfony3 und Formen.Symfony - Wie man eine Variable an ein eingebettetes Formular übergibt

Ich habe eine Parent Formular mit einem eingebetteten Kind Form. Vom Controller aus kann ich Daten senden, die ich im Formular Parent mit dem Array $ options ($ options ['varA'], ...) verwenden kann.

$form = $this->createForm(ParentEntityType::class, $objParent, array('varA'=>$varA, 'varB'=>$varB)); 

Aber was ist, wenn ich die varB Variable (zum Beispiel) auf die eingebettete Form übergeben möchten? Was ist die richtige Lösung?

Jede Hilfe wird geschätzt, danke.

+0

Vielleicht hilft Ihnen das: https://stackoverflow.com/questions/10272353/pass-value-in-options-array-to-embedded-form –

Antwort

1

So etwas wie dies in der ersten Form:

$builder->add('name', MyFormType::class, [ 
      'data' => $options['varB'] 
]); 

aber besser, wenn Sie Ihre Formulare Codes teilen. Der Hauptschlüssel besteht darin, Variablen mit $ options ['key'] in der Methode buildForm() zu übergeben.

1

ist dies eine richtige Art und Weise in 2,7 in dem Controller dies:

$itemform = $this->createForm(new SyllabusType(), $item, array('databranchid' => $branchid)); 

und in Form verwendet diese:

$builder 
     ->add('studentclassid', 'entity', array(
      'class' =>'Schoolerp\Bundle\DBBundle\Entity\Studentclass', 
      'choice_label' => 'name', 
      'empty_value' => 'Choose an option', 
      'query_builder'=>function(EntityRepository $e) use ($options){ 
       return $e->createQueryBuilder('u')->where('u.isactive=1') 
        ->andWhere('u.branchid = ?1') 
        ->setParameter(1, $options['databranchid']); 
      } 
     )) 
     ->add('sectionid', 'entity', array(
      'class' =>'Schoolerp\Bundle\DBBundle\Entity\Sections', 
      'choice_label' => 'name', 
      'empty_value' => 'Choose an option', 
      'query_builder'=>function(EntityRepository $e) use ($options){ 
       return $e->createQueryBuilder('u')->where('u.isactive=1') 
        ->andWhere('u.branchid = ?1') 
        ->setParameter(1, $options['databranchid']); 
      } 
     )); 
/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Schoolerp\Bundle\DBBundle\Entity\Syllabus', 
     'databranchid' => null 
    )); 
} 

und wenn Sie verwenden 3.0 Eingabetyp ersetzen in Klassenart.

Verwandte Themen