Symfony2:如何在sonatabundle的configureListFields中添加一个到多个属性字段?

时间:2012-04-24 05:10:34

标签: symfony mapping symfony-sonata

我有一个User Entity类,其中包含一对多属性“transactions”,用于保存该特定用户的事务。

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')
    ;
}

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

  

在呈现模板期间抛出了一个异常(“你必须定义一个associated_tostring选项,或者在SonataDoctrineORMAdminBundle中为来自服务gd_admin.customer_details的字段选项事务创建一个Project\MyBundle\Entity\Transaction::__toString方法” :CRUD:第17行的list_orm_one_to_many.html.twig。

不了解如何在“用户列表”页面中提供用户事务的链接。任何帮助都会非常棒。

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

最诚挚的问候, Champika

答案 1 :(得分:0)

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

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

这是假设您已在transaction_name实体中提交了名为Transaction的内容,或者您​​只能使用该ID。