2012-03-01 11 views
9

Tôi tự hỏi liệu có thể xây dựng một biểu mẫu bằng cách sử dụng một thực thể để nhận tất cả các trường, trong mối quan hệ một-một không. Để làm rõ:Tự động xây dựng một biểu mẫu bằng cách sử dụng thực thể (một mối quan hệ một)

Tôi có một thực thể User.php (với tất cả các trường rõ ràng, tên, họ, thể loại, v.v.) và thực thể Address.php. Những gì tôi muốn là xây dựng toàn bộ biểu mẫu mà không cần thêm từng cái một thuộc tính của thực thể Địa chỉ và lưu nó với mối quan hệ thích hợp trong cơ sở dữ liệu.

Đây là những gì tôi đã cố gắng (tôi đã trimed mã một chút), nhưng rõ ràng không phải là cách chính xác:

tài thực thể:

class User implements UserInterface { 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


/** 
* @ORM\Column(type="string", length=100, nullable=TRUE) 
*/ 
protected $firstName; 

/** 
* @ORM\Column(type="string", length=200) 
* @Assert\NotBlank() 
*/ 
protected $lastNames; 

/** 
* @ORM\OneToOne(targetEntity="Capsa\Bundle\ClubCommonBundle\Entity\Address") 
*/ 
protected $address; 

Địa chỉ lớp

class Address { 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", length=100, unique=TRUE) 
* @Assert\NotBlank() 
*/ 
protected $streetName; 

/** 
* @ORM\Column(type="string", length=50) 
*/ 
protected $streetNumber; 

builder Mẫu:

public function buildForm(FormBuilder $builder, array $options) { 
    $builder->add('login', 'text') 
      ->add('password', 'password') 
      ->add('firstName', 'text', array("required" => FALSE)) 
      ->add('lastNames', 'text') 
      ->add('address', 'entity', array(
       'class' => 'CapsaClubCommonBundle:Address', 
       'property'=>'streetName' 
      )); 
} 

Điều đó chỉ nhận được tên đường trường của bảng và đặt nó vào một danh sách.

Trả lời

0

Hãy thử sử dụng Collection form type thay vì loại trường thực thể - xem this tutorial.

+19

cuối cùng tôi đã sử dụng chỉ để tải toàn bộ đối tượng: '-> add ('address', new AddressType());' tất nhiên, defyining AddressType – Manu

+3

@Manu bình luận của bạn thực sự là câu trả lời - ít nhất là đã làm cho tôi. Cảm ơn. –

+2

Theo nhận xét của Manu ở đây là cú pháp mới hơn: '' '-> add ('address', AddressType :: class)' '' – 0x1gene

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