具有多个变量的 Symfony2 toString() 方法


Symfony2 toString() method with multiple variables

我已经构建了一个entitiy,它与多个其他数据表相关联,该表将用于填充表单上的"下拉列表"元素。

但是,当我尝试打开页面时,它说我遇到了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->??????????;
    }
}

不确定我是否可以返回一个数组,或者必须以某种方式在其他地方定义它。提前感谢!

__toString()是PHP的神奇方法之一:

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

它与Symfony关系不大。我猜你使用一种教义实体字段类型。

默认情况下,实体字段类型会将对象强制转换为字符串,PHP 将尝试对其调用 __toString() 方法。可以提供 __toString() 方法,也可以显式设置应改为调用的方法(请参阅属性文档)。

无论哪种方式,您都需要返回一个字符串,以便它可以显示在下拉列表中。

它可以是任何字符串:

public function __toString()
{
    return 'any string';
}

您可以使用以下字段之一:

public function __toString()
{
    return $this->title;
}

或者生成更复杂的字符串,甚至使用对象的协作者:

public function __toString()
{
    return $this->title . ' (' . $this->category->getName() . ')';
}

确保检查哪个对象实际被强制转换为字符串。可能是您在错误的类中添加了该方法。