2012-08-23 62 views
0

我有這些實體: - 商店和包裝一對一,單向關係

我想建立一個StoreType表單,我添加包Id。

我做了的storetype Form類:(我期望從中得到一個選擇框,所有的包都列出)

我已經通過一對一的添加軟件包,但我的問題是當我在商店窗體中添加包時,表單是創建的,但在我的數據庫存儲表中,列包是空的。我不知道爲什麼?

  • Store.php
  • /** 
    * @ORM\Entity 
    */ 
    class Store 
        { 
         /** 
         * @ORM\Id 
         * @ORM\Column(type="integer") 
         * @ORM\GeneratedValue(strategy="AUTO") 
         */ 
         protected $id; 
    
         /** 
         * @ORM\Column(type="string", length="255") 
         */ 
         protected $title; 
    
         /** 
         * @ORM\Column(type="string", length="255") 
         */ 
         protected $domain; 
    
         /** 
         * @ORM\OneToOne(targetEntity="Package",cascade={"persist", "remove"}) 
         * @ORM\JoinColumn(name="package_id", referencedColumnName="id") 
         */ 
         protected $package; 
        } 
    

  • Package.php
  • /** 
    * @ORM\Entity 
    */ 
    class Package 
        { 
         /** 
          * @ORM\Id 
          * @ORM\Column(type="integer") 
          * @ORM\GeneratedValue(strategy="AUTO") 
          */ 
         protected $id; 
    
         /** 
          * @ORM\Column(type="string", length=255) 
          */ 
         protected $title; 
    
         /** 
          * @ORM\Column(type="text", length="4000") 
          */ 
         protected $description; 
    
         /** 
          * @ORM\Column(type="boolean") 
          */ 
         protected $active; 
    
    
         public function __toString() 
          { 
          return $this->getTitle(); 
          } 
        } 
    

  • StoreType.php
  • class StoreType extends AbstractType 
        { 
         public function buildForm(FormBuilder $builder, array $options) 
         { 
          $builder 
           ->add('title') 
           ->add('domain') 
           ->add('package','entity',array(
            'class' => 'WebmuchProductBundle:Package', 
          )); 
         } 
    
    
         public function getName() 
         { 
          return 'webmuch_productbundle_storetype'; 
         } 
        } 
    

  • 商店Controller.php這樣
  • /** 
    * Store controller. 
    * 
    * @Route("/store") 
    */ 
    class StoreController extends Controller 
    { 
    /** 
    * Lists all Store entities. 
    * 
    * @Route("/", name="store") 
    * @Template() 
    */ 
    public function indexAction() 
    { 
        $em = $this->getDoctrine()->getEntityManager(); 
    
        $entities = $em->getRepository('WebmuchProductBundle:Store')->findAll(); 
    
        return array('entities' => $entities); 
    } 
    
    /** 
    * Finds and displays a Store entity. 
    * 
    * @Route("/{id}/show", name="store_show") 
    * @Template() 
    */ 
    public function showAction($id) 
    { 
        $em = $this->getDoctrine()->getEntityManager(); 
    
        $entity = $em->getRepository('WebmuchProductBundle:Store')->find($id); 
    
        if (!$entity) { 
         throw $this->createNotFoundException('Unable to find Store entity.'); 
        } 
    
        $deleteForm = $this->createDeleteForm($id); 
    
        return array(
         'entity'  => $entity, 
         'delete_form' => $deleteForm->createView(),  ); 
    } 
    
    /** 
    * Displays a form to create a new Store entity. 
    * 
    * @Route("/new", name="store_new") 
    * @Template() 
    */ 
    public function newAction() 
    { 
        $store = new Store(); 
        $form = $this->createForm(new StoreType(), $store); 
    
        return array(
         'entity' => $store, 
         'form' => $form->createView() 
        ); 
    } 
    
    /** 
    * Creates a new Store entity. 
    * 
    * @Route("/create", name="store_create") 
    * @Method("post") 
    * @Template("WebmuchProductBundle:Store:new.html.twig") 
    */ 
    public function createAction() 
    { 
        $entity = new Store(); 
        $request = $this->getRequest(); 
        $form = $this->createForm(new StoreType(), $entity); 
        $form->bindRequest($request); 
    
        if ($form->isValid()) { 
         $em = $this->getDoctrine()->getEntityManager(); 
         $em->persist($entity); 
         $em->flush(); 
    
         return $this->redirect($this->generateUrl('store_show', array('id' => $entity->getId()))); 
    
        } 
    
        return array(
         'entity' => $entity, 
         'form' => $form->createView() 
        ); 
    } 
    
    /** 
    * Displays a form to edit an existing Store entity. 
    * 
    * @Route("/{id}/edit", name="store_edit") 
    * @Template() 
    */ 
    public function editAction($id) 
    { 
        $em = $this->getDoctrine()->getEntityManager(); 
    
        $entity = $em->getRepository('WebmuchProductBundle:Store')->find($id); 
    
        if (!$entity) { 
         throw $this->createNotFoundException('Unable to find Store entity.'); 
        } 
    
        $editForm = $this->createForm(new StoreType(), $entity); 
        $deleteForm = $this->createDeleteForm($id); 
    
        return array(
         'entity'  => $entity, 
         'edit_form' => $editForm->createView(), 
         'delete_form' => $deleteForm->createView(), 
        ); 
    } 
    
    /** 
    * Edits an existing Store entity. 
    * 
    * @Route("/{id}/update", name="store_update") 
    * @Method("post") 
    * @Template("WebmuchProductBundle:Store:edit.html.twig") 
    */ 
    public function updateAction($id) 
    { 
        $em = $this->getDoctrine()->getEntityManager(); 
    
        $entity = $em->getRepository('WebmuchProductBundle:Store')->find($id); 
    
        if (!$entity) { 
         throw $this->createNotFoundException('Unable to find Store entity.'); 
        } 
    
        $editForm = $this->createForm(new StoreType(), $entity); 
        $deleteForm = $this->createDeleteForm($id); 
    
        $request = $this->getRequest(); 
    
        $editForm->bindRequest($request); 
    
        if ($editForm->isValid()) { 
         $em->persist($entity); 
         $em->flush(); 
    
         return $this->redirect($this->generateUrl('store_edit', array('id' => $id))); 
        } 
    
        return array(
         'entity'  => $entity, 
         'edit_form' => $editForm->createView(), 
         'delete_form' => $deleteForm->createView(), 
        ); 
    } 
    
    /** 
    * Deletes a Store entity. 
    * 
    * @Route("/{id}/delete", name="store_delete") 
    * @Method("post") 
    */ 
    public function deleteAction($id) 
    { 
        $form = $this->createDeleteForm($id); 
        $request = $this->getRequest(); 
    
        $form->bindRequest($request); 
    
        if ($form->isValid()) { 
         $em = $this->getDoctrine()->getEntityManager(); 
         $entity = $em->getRepository('WebmuchProductBundle:Store')->find($id); 
    
         if (!$entity) { 
          throw $this->createNotFoundException('Unable to find Store entity.'); 
         } 
    
         $em->remove($entity); 
         $em->flush(); 
        } 
    
        return $this->redirect($this->generateUrl('store')); 
    } 
    
    private function createDeleteForm($id) 
    { 
        return $this->createFormBuilder(array('id' => $id)) 
         ->add('id', 'hidden') 
         ->getForm() 
        ; 
    } 
    } 
    
    +0

    你的代碼似乎要被罰款。即使我使用了你的代碼,對我來說一切都可以(不同的是我已經公開訪問了所有的屬性以避免創建getter/setter - 但是如果你有getters/setter,它也應該可以正常工作)。所以我建議你,在實體和命名空間中檢查你的setter/getters。 – Cyprian

    +0

    PLZ刪除SQL服務器標記 –

    回答

    0

    我想你忘記了這樣做在你的createAction:

    $request = $this->getRequest(); 
    $form->setData($request->getPost()); 
    
    +0

    他有:$ form-> bindRequest($ request);並不需要「setData」 – Cyprian

    +0

    所以他必須看到var_dump()爲$ request-> getPost()和$ form-> getData() –

    +1

    Cyprian和Sina Miandashti謝謝。我解決了它。我只是把set ID將實體作爲公共存儲,然後運行。 public function setId(){return $ this-> id; } – Sid