2013-03-04 31 views
5

Tôi có mối quan hệ thực thể sau:giá trị qua Symfony2 để loại biểu mẫu thu thập

  • Một khách hàng có địa chỉ một nhiều để
  • An Địa chỉ có nhiều-to-one County và nhiều-to-one Thành phố
  • Quận có thành phố một-nhiều.

Vì vậy, trong CustomerType tôi, tôi có

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, 
     )) 
    ; 
} 

Và trong AddressType tôi, tôi có

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' => '', 
     )) 
    ; 
} 

Mục tiêu của tôi là để chỉ hiển thị các thiết lập của thành phố cho các quận tương ứng của họ. Tôi có thể nhận được các giá trị vào CustomerType từ $ tùy chọn nhưng làm thế nào tôi có thể vượt qua các giá trị để AddressType? Vì vậy, mỗi địa chỉ nhận được quận tương ứng của nó để tìm kiếm các thành phố?

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn!

Trả lời

2

Sử dụng constructor trong AddressType, tác phẩm của mình cho tôi ..

CustomerType:

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, 
     )) 
    ; 
} 

AddressType:

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

Giải pháp này bị phản đối trong Symfony 2.7 và không thể thực hiện được ở 3.0. Bạn không thể chuyển các tham số trong Class formType ngay bây giờ, nhưng bạn có thể làm điều đó bằng cách chèn phần tử nex trong $ options: http://stackoverflow.com/a/34035653/1338420 –

2

Tôi nghĩ rằng bạn có thể sử dụng tùy chọn 'tùy chọn' của loại bộ sưu tập. Nó tốt hơn việc sử dụng hàm tạo trong trường hợp bạn muốn sử dụng lại biểu mẫu ở nơi khác.

Symfony Mẫu tham khảo: Collection Type

Nhưng hãy nhớ để xác định các biến trong phương pháp setDefaultOptions của bạn. (Cả hai hình thức phải có nó)

+1

Tùy chọn "tùy chọn" này cũng hoạt động cho các loại được xác định tùy chỉnh, mở rộng AbstractType. Cảm ơn cho các đầu mối! – FoxException

7

trong symfony3:

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

Cảm ơn. Nó ổn với tôi! – georgiar

Các vấn đề liên quan