2012-02-06 17 views
6

Hãy nói rằng tôi có bình thường *Type lớp:Làm thế nào để có được thể hiện của kho lưu trữ thực thể trong lớp Form (Type) trong Symfony 2?

class LocationType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add(...) 
      ... 
    } 
} 

và một trong những lĩnh vực là một loại choice. Các giá trị cần được sử dụng như các mục lựa chọn được cho là được lấy ra từ cơ sở dữ liệu (từ một số kho lưu trữ thực thể cụ thể).

Vì vậy, câu hỏi đặt ra là: cách tải kho lưu trữ trong lớp LocationType? Là đi qua nó thông qua các nhà xây dựng cách duy nhất để có được nó?

UPD:

tôi biết về entity loại nhưng tiếc là tôi không thể sử dụng nó, bởi vì tài sản của tôi không phải là và không thể được định nghĩa là one-to-one liên quan do điều kiện quan hệ rất phức tạp mà Học thuyết không hỗ trợ (chưa ?). Xem How to specify several join conditions for 1:1 relationship in Doctrine 2 biết thêm chi tiết

Trả lời

9

Bạn có thể chỉ định một loại lĩnh vực tổ chức như một tùy chọn như vậy:

$builder 
    ->add('foo', 'entity', array(
     'class' => 'FooBarBundle:Foo', 
     'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
      return $er->createQueryBuilder('q')->orderBy('q.name', 'ASC'); 
     }, 
    )); 

EDIT: Trên thực tế tùy chọn 'lớp' chỉ là lựa chọn trường bắt buộc. Bạn có thể đọc thêm một chút về loại trường thực thể tại đây: http://symfony.com/doc/2.0/reference/forms/types/entity.html

Hy vọng điều này sẽ hữu ích.

EDIT:

Tiếp tục để thảo luận dưới đây, đây là một ví dụ

Trong bộ điều khiển:

$entity = new Foo(); 
$type = new FooType(); 

$er = $this->getDoctrine() 
    ->getEntityManager() 
    ->getRepository('FooBarBundle:Foo'); 

$form = $this->createForm($type, $entity, array(
    'foo_repository' => $er 
)); 

Mảng $options được truyền cho phương thức FooType::buildForm(), vì vậy foo_repository thì nên có sẵn trong phương thức này như sau:

$er = $options['foo_repository']; 
+0

Tôi không thể làm như vậy, bởi vì thuộc tính 'foo' của tôi không được định nghĩa là bất kỳ quan hệ nào (' một-một-một') vì quan hệ được xác định theo cách rất khó mà giáo lý hiện không hỗ trợ. http://stackoverflow.com/questions/9123264/how-to-specify-several-join-conditions-for-11-relationship-in-doctrine-2 - đây là câu hỏi giải thích trường hợp – zerkms

+0

Xin lỗi, tôi đã không làm như vậy t chỉ định chi tiết quan trọng như vậy trong bản sửa đổi câu hỏi đầu tiên, +1 cho trợ giúp. Bất kỳ suy nghĩ nào khác? – zerkms

+0

Xin chào. Không vấn đề gì. Tôi có thể đã đọc câu hỏi của bạn quá nhanh! Tôi muốn đề nghị '$ this-> buildForm ($ type, $ entity, array ('repository' => $ er))' trong bộ điều khiển của bạn để vượt qua lớp kho lưu trữ như là một tùy chọn cho form của bạn, nhưng tôi đoán câu hỏi của bạn bạn đang tìm cách để tránh điều này. –

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