2013-03-04 9 views
5

Ich habe folgende Einheit Beziehungen:Symfony2 Weitergabe Werte Sammlung Formulartyp

  • Ein Kunde hat eine Eins-zu-viele-Adresse
  • Eine Adresse many-to-one-Kreis hat und viele-zu-eins Stadt
  • Ein County hat one-to-many City.

Also, meinen Customer habe ich

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ... 
     ->add('addresss', 'collection', array(
      'label' => 'customer.address', 
      'type' => new AddressType(), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'by_reference' => false, 
     )) 
    ; 
} 

Und in meinem Address, ich habe

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ... 
     ->add('city', 'entity', array(
      'class' => 'MyCustomerBundle:City', 
      'query_builder' => function(CityRepository $cr) use ($options) { 
       return $cr->getCityQB($options['county']); 
      }, 
      'property' => 'city', 
      'empty_value' => '', 
     )) 
    ; 
} 

Mein Ziel nur ist, um den Satz von Städten für ihren entsprechenden Kreis anzuzeigen. Ich kann die Werte von $ Optionen in CustomerType abrufen, aber wie kann ich die Werte an AddressType übergeben? Damit jede Adresse ihren entsprechenden Kreis bekommt, um die Städte nachzuschlagen?

Jede Hilfe wäre willkommen. Vielen Dank!

Antwort

2

Verwenden Sie den Konstruktor in Address, seine Werke für mich ..

Customer:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ... 
     ->add('addresss', 'collection', array(
      'label' => 'customer.address', 
      'type' => new AddressType($your_variable), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'by_reference' => false, 
     )) 
    ; 
} 

Address:

private $your_variable; 

public function __construct($variable) 
{ 
    $this->your_variable= $variable; 
} 
... 
public function buildForm(FormBuilderInterface $builder, array $options){ 
    $your_variable = $this->your_variable; 
    'query_builder' => function(CityRepository $cr) use ($your_variable) { 
     return $cr->getCityQB($your_variable); 
    }, 
} 
+4

Diese Lösung in Symfony 2.7 ist veraltet und kann in 3,0 nicht möglich. Sie können jetzt keine Parameter in Class formType übergeben, aber Sie können dies tun, indem Sie nex-Element in $ options einfügen: http://stackoverflow.com/a/34035653/1338420 –

2

Ich glaube, Sie die Option 'Optionen' nutzen könnten des Sammlertyps. Es ist besser als den Konstruktor zu verwenden, falls Sie das Formular woanders wiederverwenden möchten.

Symfony Formular Referenz: Collection Type

Aber denken Sie daran, die Variable in Ihrer setDefaultOptions Methode zu definieren. (Beide Formen müssen es haben)

+1

Diese "Optionen" -Option funktioniert auch für benutzerdefinierte Typen, Erweiterung von AbstractType. Danke für den Hinweis! – FoxException

7

in symfony3:

$builder->add('example', CollectionType::class, array(
    'entry_type' => ExampleType::class, 
    'entry_options' => array(
     'my_custom_option' => true), 
)); 
+1

Danke. Das ist für mich in Ordnung! – georgiar

Verwandte Themen