【问题标题】:embed one form into another symfony2将一个表单嵌入到另一个 symfony2
【发布时间】:2013-01-29 00:12:04
【问题描述】:

我有两个实体表单,分别称为“订单”和“地址”。我想将地址表格嵌入到订单表格中。两个实体都有用户列的关系。

地址实体

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

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

    /**
     * @ORM\ManyToOne(targetEntity="Root\UserBundle\Entity\User", inversedBy="address")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     * @ORM\ManyToOne(targetEntity="Orders", inversedBy="address")
     * @ORM\JoinColumn(name="user", referencedColumnName="user")
     */     
    protected $user;       

订单实体

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

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

    /**
     * @ORM\ManyToOne(targetEntity="Root\UserBundle\Entity\User", inversedBy="orders")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     * @ORM\OneToMany(targetEntity="Address", mappedBy="orders")
     * @ORM\JoinColumn(name="user", referencedColumnName="user")
     */     
    protected $user;     

订单表格

namespace Root\ContestBundle\Form\Front;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Root\ContestBundle\Entity\Address;
use Root\ContestBundle\Form\Front\AddressType;
class OrdersType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address', 'collection', array('type' => new AddressType()));
        $builder
        ->add('termsAccepted');

    }

但我收到如下错误

An exception has been thrown during the rendering of a template ("Neither property "address" nor method "getAddress()" nor method "isAddress()" exists in class "Root\ContestBundle\Entity\Orders"") 

那么我在代码中犯了什么错误。帮帮我

【问题讨论】:

    标签: symfony doctrine-orm symfony-2.1


    【解决方案1】:

    也许为时已晚,但这是我的答案。 几天前我发现了 symfony,所以我不是专家。 对我来说,有一些事情看起来很尴尬。

    关于地址实体,我认为你应该这样做:

    /** @ORM\OneToMany(targetEntity="Order", mappedBy="adress") */
    protected $orders; 
    
    public function addOrder(Order $order){
        $this->orders[] = $order;
    }
    
    public function removeOrder(Order $order){
        $this->orders->removeElement($order);
    }
    
    public function getOrders(){
        return $this->orders;
    }
    

    在 Order Entity 上,我想你应该有这个:

    /**
     * @ORM\ManyToOne(targetEntity="Address", inversedBy="orders")
     * @ORM\JoinColumn(name="idAdress", referencedColumnName="id")
     */     
    protected $adress;
    
    public function setAdress($adress){
        $this->adress = $adress;
    }
    
    public function getAdress(){
        return $this->adress;
    }
    

    最后是你的 OrderType,我认为你应该有那个:

    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder->add('adress',new AdressType());
    }
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多