2011-09-10 21 views
5

Aralarında OneToMany ilişkisi olan Kullanıcı ve Telefon varlıkları var. Symfony2 Gömülü Varlıklar

My Kullanıcı varlık:

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

    /* ..... */ 

} 

Ve Telefon varlık: Ben biraz kısa yapmak için kod parçasını sildiniz

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

    /* ..... */ 
} 

, ben bir kimliği alanı ve ekstra diğer alanlarda varlıklarla ilgili. Benim denetleyicisi olarak

, bunu yapıyorum:

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

    $form = $this->createForm(new UserRegister(), $user); 
    /* ..... */ 
} 
benim form sınıfta

:

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

} 

Ve dal şablonunda: Ben ne

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

Temelde yapmaya çalışmak, bir kullanıcının birden fazla telefon numarasına sahip olmasına izin vermek, dolayısıyla Kullanıcı ve Telefon arasında OneToMany ilişkisine sahip olmaktır. Formumda, formumdaki 'Telefon' öğesinin 'sayı' alanını göstermek ve ardından ilgili kullanıcıya tek bir telefon kaydı eklemek istiyorum.

Halen yukarıdaki kodla form render ama vermeye başladı:

"Doktrin \ Common \ Koleksiyonları \ ArrayCollection 0000000062cf59cf00000000e32fc883 @" Telefon alanında.

Form sınıfındaki 'telefon' ifadesini 'class' olarak değiştirmek bir Twig_Runtime_Error sonucuna yol açar. "Telefon dizeye dönüştürülemedi" 500 iç sunucu hatası. Telefon varlığında sayı öğesi almak için 'form.phone.number' olarak görüntülemeye çalıştım, ancak şunu söylüyor:

Nesne için "Yöntem" numarası "Symfony \ Component \ Form \ FormView" değil "

" Sınıf "olarak form sınıfındaki 'telefon' türünü değiştirmeyi denedim ve diziyi Varlık ad alanını yansıtacak şekilde ekledim, ancak her zaman" Varlığınızı yönetmeniz gerekiyor "hatasını gösterecektir.

Kaybettim ve bunun nasıl yapılacağından emin değilim, hem Kullanıcı hem de Telefon nesnelerini ayrı ayrı oluşturabildiğim, değişiklikleri yapabildiğim ve daha sonra bunları teker teker sürdürdüğüm bir yer okudum. En iyi uygulama olup olmadığından emin değilim, benim yaklaşımım bir Kullanıcı nesnesi oluşturmak, ona Telefon kaydı eklemek ve Kullanıcı nesnesini korumaktı.

cevap

0
Sen "\ ArrayCollection 0000000062cf59cf00000000e32fc883 @ Doktrin \ Common \ Koleksiyonlar'ı" mesajı $ form- yaparak fisplaying gelen önleyebilir

> ('telefon') olsun -> setData (''); Geri kalanı için , sana yardım edemez, ben de bir cevap gibi ...

1

"inat {kaskad = eklemek gerek,

OneToMany ilişkisi ile Symfony'nin yerleştir-Formu için
/** 
* @var Doctrine\Common\Collections\ArrayCollection 
* 
* @ORM\OneToMany(targetEntity="Phone", mappedBy="user", cascade={"persist"}) 
*/ 
private $phone; 

ile deneyin ediyorum "} ek açıklamada