我正在尝试在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()
方法获得)