在symfony中嵌入表单并保存实体


Embed forms in symfony and save entities

我正在尝试在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()));
        }

选择类型.php

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

那我做错了什么?

__toString()方法添加到Color

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

导致此错误是因为Symfony的表单试图提供对象的"GUI表示",并且,如果您没有在FormBuilder中指定任何其他内容(或者如果您不使用任何DataTransformer),它将搜索对象的字符串表示(您可以使用__toString()方法获得)