2011-09-10 38 views
5

Tôi có các thực thể Người dùng và Điện thoại có mối quan hệ OneToMany giữa chúng.Các đối tượng nhúng Symfony2

thực thể tài khoản của tôi:

namespace Project\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* Project\UserBundle\Entity\User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User 
{ 
    /* ..... */ 

    /** 
    * @var Doctrine\Common\Collections\ArrayCollection 
    * 
    * @ORM\OneToMany(targetEntity="Phone", mappedBy="user") 
    */ 
    private $phone; 

    public function __construct() 
    { 
     $this->phone = new ArrayCollection(); 
    } 

    /** 
    * Add phone 
    * 
    * @param Project\UserBundle\Entity\Phone $phone 
    */ 
    public function addPhone(\Project\UserBundle\Entity\Phone $phone) 
    { 
     $this->phone[] = $phone; 
    } 

    /** 
    * Get phone 
    * 
    * @return Doctrine\Common\Collections\Collection 
    */ 
    public function getPhone() 
    { 
     return $this->phone; 
    } 

    /* ..... */ 

} 

Và thực thể điện thoại của tôi:

namespace Project\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Project\UserBundle\Entity\Phone 
* 
* @ORM\Table(name="user_phone") 
* @ORM\Entity 
*/ 
class Phone 
{ 
    /* ..... */ 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="phone") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $user; 

    /** 
    * @var string $number 
    * 
    * @ORM\Column(name="number", type="string", length=128) 
    */ 
    private $number; 

    /** 
    * Set user 
    * 
    * @param Project\UserBundle\Entity\User $user 
    */ 
    public function setUser(\Project\UserBundle\Entity\User $user) 
    { 
     $this->user = $user; 
    } 

    /** 
    * Get user 
    * 
    * @return Project\UserBundle\Entity\User 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 

    /* ..... */ 
} 

Tôi đã xóa một phần của mã để làm cho nó một chút ngắn, tôi có một lĩnh vực Id và thêm các lĩnh vực khác liên quan đến các thực thể.

Trong điều khiển của tôi, tôi đang làm điều này:

public function showFormAction($entity) 
{ 
    /* ..... */ 
    $user = new User(); 
    $phone = new Phone(); 
    $user->addPhone($phone); 

    $form = $this->createForm(new UserRegister(), $user); 
    /* ..... */ 
} 

Trong lớp hình thức của tôi:

class UserRegister extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('email', 'text') 
       ->add('password', 'repeated', array(
          'type' => 'password', 
          'invalid_message' => 'The password fields must match.', 
          'options' => array('label' => 'Password'), 
          'error_bubbling' => false) 
        ) 
       ->add('first_name', 'text') 
       ->add('last_name', 'text') 
       ->add('phone', 'text'); 
    } 

    public function getName() 
    { 
     return 'register'; 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'data_class' => 'Project\UserBundle\Entity\User', 
     ); 
    } 

} 

Và trong mẫu cành lá của tôi:

<div> 
    {{ form_errors(form.phone) }} 
    {{ form_label(form.phone, null, { 'attr': {'class': 'span-3'} }) }} 
    {{ form_widget(form.phone, { 'attr': {'class': 'text'} }) }} 
</div> 

Những gì tôi cố gắng làm cơ bản là cho phép người dùng có nhiều số điện thoại, do đó có mối quan hệ OneToMany giữa Người dùng và Điện thoại. Trong biểu mẫu của tôi, tôi muốn hiển thị trường 'số' của thực thể 'Điện thoại' trong biểu mẫu của tôi và sau đó thêm một bản ghi điện thoại duy nhất cho người dùng tương ứng.

Hiện nay, với đoạn code trên, hình thức được render nhưng cho thấy:

"Học thuyết \ Common \ Bộ sưu tập \ ArrayCollection @ 0000000062cf59cf00000000e32fc883" trong lĩnh vực điện thoại.

Thay đổi 'phone' thành 'collection' trong kết quả của lớp biểu mẫu thành Twig_Runtime_Error "Không thể chuyển đổi điện thoại thành chuỗi" 500 lỗi máy chủ nội bộ. Tôi đã cố gắng hiển thị điện thoại dưới dạng 'form.phone.number' để có được phần tử số trong thực thể Điện thoại, tuy nhiên nó nói:

"Phương thức" số "cho đối tượng" Symfony \ Component \ Form \ FormView "không tồn tại "

Tôi cũng đã cố gắng thay đổi loại 'điện thoại' trong lớp biểu mẫu thành 'thực thể' và thêm mảng để phản ánh không gian tên Entity, tuy nhiên nó sẽ luôn hiển thị lỗi" Bạn cần quản lý đối tượng của bạn ".

Tôi khá lạc lõng và không biết chắc phải làm như thế nào, tôi đã đọc ở đâu đó để có thể khởi tạo cả hai đối tượng Người dùng và Điện thoại một cách riêng biệt, thực hiện thay đổi và sau đó duy trì từng cái một. Tôi không chắc đó có phải là thực hành tốt nhất hay không, cách tiếp cận của tôi là tạo một đối tượng User, thêm một bản ghi điện thoại vào nó, và sau đó vẫn tồn tại đối tượng User.

Trả lời

0

Bạn có thể ngăn không cho hiển thị thông báo "Doctrine \ Common \ Collections \ ArrayCollection @ 0000000062cf59cf00000000e32fc883" bằng cách tạo $ form-> get ('phone') -> setData (''); Đối với phần còn lại, tôi không thể giúp bạn, tôi cũng muốn một câu trả lời ...

1

Hãy thử với

/** 
* @var Doctrine\Common\Collections\ArrayCollection 
* 
* @ORM\OneToMany(targetEntity="Phone", mappedBy="user", cascade={"persist"}) 
*/ 
private $phone; 

Đối Symfony Nhúng-Form với mối quan hệ OneToMany, cần thêm cascade = { "tồn tại "} trong chú thích

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