0

我有一个用户实体类,其中包含一对多的属性“事务”,该属性包含该特定用户的事务。

use Sonata\UserBundle\Entity\BaseUser as BaseUser;
class User extends BaseUser
{
     //...//

     /*
      * @ORM\OneToMany(targetEntity="Transaction", mappedBy="user")
      *
      */
      protected $transactions;

     //...//
}

在后端我有扩展奏鸣曲管理类的 userAdmin 类

/**
 * @param \Sonata\AdminBundle\Datagrid\ListMapper $listMapper
 * @return void
 */
protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('id')
        ->addIdentifier('username')
        ->add('transactions')
    ;
}

如果我这样做,我会收到以下错误:

在 SonataDoctrineORMAdminBundle:CRUD:list_orm_one_to_many.html.twig 的第 17 行呈现模板期间引发了异常(“您必须从服务 gd_admin.customer_details 为字段选项事务定义associated_tostring选项或创建方法是”)。Project\MyBundle\Entity\Transaction::__toString

不明白如何在“用户列表”页面中提供指向用户交易的链接。任何帮助都会非常有用。

谢谢。

4

2 回答 2

3

您需要在 Transaction 类中实现 __toString() 方法。它应该返回一个有意义地描述交易的字符串。Symfony 将自动调用此方法来获取要向用户显示的交易描述。以下是我在一个项目中用于 User 类的示例实现:

public function __toString()
{
    return ($this->firstName . ' ' . $this->lastName);
} 

最好的问候, Champika

于 2012-04-24T10:26:12.513 回答
0

您所要做的就是function __toString()在您的实体上指定,或者在字段规范中有另一个选项,您可以说明应该将哪个属性用作实体的标题,如下所示:

$listMapper
    ->add('id')
    ->addIdentifier('username')
    ->add('transactions', null, array('associated_property' => 'transaction_name'))
;

这一切都假设您已经transaction_nameTransaction实体中提交了调用,或者您可以只使用 ID。

于 2016-12-13T16:28:26.933 回答