【问题标题】:Embed forms in symfony and save entities在 symfony 中嵌入表单并保存实体
【发布时间】:2016-01-15 09:47:02
【问题描述】:

我正在尝试在 symfony 中嵌入表单,但我不确定我做错了什么。我有两个实体。用户和颜色

用户.php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * User
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="Color", cascade={"persist"})
     */
    protected $color;

    public function getId()
    {
        return $this->id;
    }


    public function getColor()
    {
        return $this->color;
    }

    public function setColor($color)
    {
        $this->color = $color;
    }
}

颜色.php

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Color
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Color
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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


    public function getId()
    {
        return $this->id;
    }


    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    public function getName()
    {
        return $this->name;
    }
}

表单渲染得很好,但是当我尝试保存实体时,我收到一条错误消息Catchable Fatal Error: Object of class AppBundle\Entity\Color could not be converted to string

这是我的控制器

.......

 $user = new User();

        $form = $this->createForm(new SelectionType(), $user);

        $form->handleRequest($request);

        if($form->isValid()){
            $em = $this->getDoctrine()->getManager();
            $em->persist($user);
            $em->flush();
            return new Response(sprintf('ID %s', $user->getId()));
        }

SelectionType.php

........
 ->add('color', new ColorType())
....

那么我做错了什么?

【问题讨论】:

    标签: php forms symfony doctrine


    【解决方案1】:

    __toString() 方法添加到您的Color

    // all declaration here
    class Color
    {
      // all properties here
    
      public function __toString()
      {
        return $this->name();
      }
    
      // all getters and setters here
    }
    

    这个错误是因为 Symfony 的 Form 试图为你的对象提供一个“GUI 表示”,如果你没有在 FormBuilder 中指定任何其他内容(或者如果你不使用任何 DataTransformer),它会搜索对象的字符串表示(可以通过__toString() 方法获得)

    【讨论】:

    • 谢谢你成功了。我不再得到错误。现在我有另一个问题。当我保存用户实体时,我会在颜色表中获得额外的记录,这是我不需要的行为。任何想法如何解决这个问题?
    • @Vodokan “额外记录”是什么意思?
    • 表格颜色有Green、Yellow和Blue三个记录(在表格中用下拉表示)。当$this-&gt;persist($user) 执行时,表格颜色会从下拉列表中获得一个带有所选值的新行,因此它变为绿色、黄色、蓝色黄色,这不是我想要的。我只想在用户和颜色表之间使用所选颜色保持参考。
    • 在这种情况下,您需要一个额外的表(用于关系)来保存此信息(我想)
    • 在这种情况下,您应该使用表单集合,并且关系将分别为用户和颜色实体的 OneToMany 和 ManyToOne。你可以在cookbook阅读更多内容。
    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多