我已经建立了一个权利,它与多个其他数据表关联,用于填充表单上的“下拉列表”元素。
但是,当我尝试打开该页面时,它表示我遇到了 toString()
错误。我以前只用一个实体关系来处理这个问题,但我对如何在多关系系统中处理它感到无能为力。
class Articles
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, nullable=false)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=false)
*/
private $content;
/**
* @var \DateTime
*
* @ORM\Column(name="datetime", type="datetime", nullable=false)
*/
private $datetime;
/**
* @ORM\ManyToOne(targetEntity="ArticlesCategory", inversedBy="articles")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
/**
* @var string
*
* @ORM\Column(name="path", type="string", length=255, nullable=false)
*/
private $path;
/**
* @ORM\ManyToOne(targetEntity="ArticlesAuthor", inversedBy="articles")
* @ORM\JoinColumn(name="author_id", referencedColumnName="id")
*/
private $author;
/**
* @ORM\ManyToOne(targetEntity="Matches", inversedBy="articles")
* @ORM\JoinColumn(name="match_id", referencedColumnName="id")
*/
private $match;
public function __toString()
{
return $this->??????????;
}
}
我不确定我是否可以返回一个数组,或者不得不以某种方式在别处定义它。提前谢谢!
答案 0 :(得分:3)
__toString()
是PHP的神奇方法之一:
__ toString()允许类决定当它被视为字符串时它将如何反应。例如,echo $ obj;将打印。此方法必须返回一个字符串,否则会发出致命的E_RECOVERABLE_ERROR级错误。
与Symfony没什么关系。我猜你使用doctrine entity field types之一。
默认情况下,实体字段类型会将对象强制转换为字符串,PHP将尝试在其上调用__toString()
方法。您可以提供__toString()
方法,也可以显式设置应该调用的方法(请参阅the property docs)。
无论哪种方式,您都需要返回一个字符串,因此它可以显示在下拉列表中。
它可以是任何字符串:
public function __toString()
{
return 'any string';
}
您可以使用其中一个字段:
public function __toString()
{
return $this->title;
}
或者生成更复杂的字符串,甚至使用对象的协作者:
public function __toString()
{
return $this->title . ' (' . $this->category->getName() . ')';
}
确保检查哪个对象实际上被强制转换为字符串。可能是您在错误的类中添加了该方法。