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

Symfony2 toString() method with multiple variables

我建立了一个实体,它与多个其他 table 数据有关联,将用于填充“dropdown”元素一个表格。

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

我不确定我是否可以 return 一个数组,或者必须以某种方式在别处定义它。提前致谢!

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

__toString() allows a class to decide how it will react when it is treated like a string. For example, what echo $obj; will print. This method must return a string, as otherwise a fatal E_RECOVERABLE_ERROR level error is emitted.

与Symfony关系不大。我猜你使用了 doctrine entity field types.

之一

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

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

可以是任意字符串:

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

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

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

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

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

确保检查哪个对象实际被转换为字符串。可能是您添加的方法有误class。