2011-09-10 13 views
5

मेरे पास उनके बीच एक से अधिक संबंधों के साथ उपयोगकर्ता और फोन इकाइयां हैं।सिम्फनी 2 एंबेडेड इकाइयां

मेरे उपयोगकर्ता इकाई:

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

    /* ..... */ 

} 

और मेरे फोन इकाई: एक आईडी क्षेत्र

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

    /* ..... */ 
} 

मैं यह थोड़ा कम करने के लिए कोड का हिस्सा नष्ट कर दिया है, मेरे पास है और अतिरिक्त अन्य क्षेत्रों संस्थाओं से संबंधित है।

मेरी नियंत्रक में, मैं यह कर रहा हूँ:

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

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

मेरी प्रपत्र वर्ग में:

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

} 

और मेरे टहनी टेम्पलेट में:

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

मैं क्या कर रहा हूँ मूल रूप से करने की कोशिश करना एक उपयोगकर्ता को कई फोन नंबर रखने की इजाजत देना है, इसलिए उपयोगकर्ता और फोन के बीच एक बहुत ही संबंध है। मेरे रूप में, मैं अपने फॉर्म में 'फ़ोन' इकाई का 'नंबर' फ़ील्ड दिखाना चाहता हूं और फिर संबंधित उपयोगकर्ता को एक एकल फोन रिकॉर्ड जोड़ना चाहता हूं।

वर्तमान में, इसके बाद के संस्करण कोड के साथ, प्रपत्र प्रतिपादन लेकिन दिखा रहा है:

"सिद्धांत \ Common \ संग्रह \ ArrayCollection @ 0000000062cf59cf00000000e32fc883" फोन क्षेत्र में।

फॉर्म क्लास में 'संग्रह' में 'फ़ोन' बदलना एक Twig_Runtime_Error "फ़ोन को स्ट्रिंग में परिवर्तित नहीं किया जा सका" 500 आंतरिक सर्वर त्रुटि। मैंने फ़ोन इकाई में संख्या तत्व प्राप्त करने के लिए फोन को 'form.phone.number' के रूप में प्रस्तुत करने का प्रयास किया है, हालांकि यह कहता है:

ऑब्जेक्ट "सिम्फनी \ घटक \ फ़ॉर्म \ फ़ॉर्म व्यू" के लिए "विधि" संख्या " मौजूद है "

मैंने फॉर्म क्लास में 'इकाई' को 'इकाई' में बदलने की कोशिश की है और इकाई नामस्थान को प्रतिबिंबित करने के लिए सरणी को जोड़ा है, हालांकि यह हमेशा" आपको अपनी इकाई प्रबंधित करने की आवश्यकता "त्रुटि दिखाएगा।

मैं खो गया हूं और यह सुनिश्चित नहीं करता कि यह कैसे किया जाना चाहिए, मैंने कहीं पढ़ा है कि मैं अलग-अलग उपयोगकर्ता और फोन ऑब्जेक्ट्स को तुरंत चालू कर सकता हूं, बदलाव कर सकता हूं, और फिर उन्हें एक-एक करके जारी रख सकता हूं। मुझे यकीन नहीं है कि यह सबसे अच्छा अभ्यास है या नहीं, मेरा दृष्टिकोण उपयोगकर्ता ऑब्जेक्ट बनाना था, इसमें एक फोन रिकॉर्ड जोड़ें, और फिर उपयोगकर्ता ऑब्जेक्ट को जारी रखें।

उत्तर

0

आप $ फार्म बनाने "\ ArrayCollection @ 0000000062cf59cf00000000e32fc883 सिद्धांत \ Common \ संग्रह" द्वारा संदेश fisplaying से रोका जा सकता है> ('फोन') प्राप्त करें -> setData (''); बाकी के लिए, मैं तुम्हें मदद नहीं कर सकता, मैं भी एक जवाब की तरह ...

1

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

OneToMany संबंध के साथ Symfony एम्बेड आकार के लिए के साथ की कोशिश करेगा, झरना = जोड़ने की जरूरत है { "जारी रहती है "} एनोटेशन में