我有这个地址表。一切都按预期工作,直到我为城市添加了一个下拉选择字段。我在尝试保存表单时收到此错误:
捕获致命错误:类AppBundle \ Entity \ Address的对象无法转换为字符串
文档说EntityType字段用于从Doctrine实体加载选项。
这是表格:
$builder
->add('cities', EntityType::class, array(
'class' => \AppBundle\Entity\Cities::class,
'choice_label' => 'cityname',
'choice_value' => 'cityid')
)
这是我的实体
/**
* @var string
*
* @ORM\Column(name="cities", type="string", length=55, nullable=false)
*/
private $cities;
and setters / getters:
/**
* Set cities
*
* @param string $cities
*
* @return Address
*/
public function setCities($cities)
{
$this->cities = $cities;
return $this;
}
/**
* Get cities
*
* @return string
*/
public function getCities()
{
return $this->cities;
}
我还补充说:
public function __toString() {
return $this->getCities();
}
得到了这个结果:
捕获致命错误:方法AppBundle \ Entity \ Address :: __ toString() 必须返回一个字符串值
答案 0 :(得分:4)
您应该为您实施__toString()
方法实体:
__ toString()允许类决定当它被视为字符串时它将如何反应。例如,echo $ obj;将打印。此方法必须返回一个字符串,否则会发出致命的E_RECOVERABLE_ERROR级错误。
例如,您可以编写类似这样的内容来将您的类表示为字符串:
public function __toString() {
return $this->getCities();
}
有关此魔术方法 here的更多信息。