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

时间:2015-01-11 09:27:18

标签: php symfony tostring entities

我已经建立了一个权利,它与多个其他数据表关联,用于填充表单上的“下拉列表”元素。

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

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

1 个答案:

答案 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() . ')';
}

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