Symfony 3类的对象无法转换为字符串

Dan*_*nia 1 php entity symfony

我有这个地址表格。一切都按预期进行,直到我为城市添加了一个下拉选择字段。尝试保存表单时出现此错误:

可捕获的致命错误:无法将类AppBundle \ Entity \ Address的对象转换为字符串

文档说EntityType字段旨在从Doctrine实体加载选项。

形式如下:

 $builder
             ->add('cities', EntityType::class, array(
                'class' => \AppBundle\Entity\Cities::class,
                'choice_label' => 'cityname',
                'choice_value' => 'cityid')
            )
Run Code Online (Sandbox Code Playgroud)

这是我的实体

 /**
 * @var string
 * 
 * @ORM\Column(name="cities", type="string", length=55, nullable=false)
 */
private $cities;   
Run Code Online (Sandbox Code Playgroud)

和设置器/获取器:

 /**
 * 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;
}
Run Code Online (Sandbox Code Playgroud)

我还添加了这个:

public function __toString() {
  return $this->getCities();
}
Run Code Online (Sandbox Code Playgroud)

并得到以下结果:

可捕获的致命错误:方法AppBundle \ Entity \ Address :: __ toString()必须返回字符串值

小智 5

您应该__toString()为您的实体实现方法:

__toString()允许类决定将其视为字符串时的反应。例如,echo $ obj; 将打印。此方法必须返回一个字符串,否则将发出致命的E_RECOVERABLE_ERROR级错误。

例如,您可以编写如下代码将您的类表示为字符串:

public function __toString() {
  return $this->getCities();
}
Run Code Online (Sandbox Code Playgroud)

有关此魔术方法的 更多信息,请参见此处