0

特定のユーザーのトランザクションを保持する 1 対多のプロパティ「トランザクション」を含むユーザー エンティティ クラスがあります。

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

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

     //...//
}

バックエンドには、sonata admin クラスを拡張する 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 行目で、テンプレートのレンダリング中に例外がスローされました ("You must define an associated_tostringoption or create a method to the field option transactions from service gd_admin.customer_details is ")。Project\MyBundle\Entity\Transaction::__toString

ユーザー リスト ページでユーザー トランザクションへのリンクを提供する方法がわかりません。どんな助けでも本当に素晴らしいでしょう。

ありがとう。

4

2 に答える 2

3

Transaction クラスに __toString() メソッドを実装する必要があります。トランザクションを意味のある形で説明する文字列を返す必要があります。symfony は自動的にこのメソッドを呼び出して、ユーザーに対して表示されるトランザクションの説明を取得します。以下は、私のプロジェクトの 1 つで User クラスに使用した実装例です。

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

よろしく、チャンピカ

于 2012-04-24T10:26:12.513 に答える
0

あなたがしなければならないのは、function __toString()あなたのエンティティで指定するか、フィールド仕様に別のオプションがあり、エンティティのタイトルとしてどのプロパティを使用する必要があるかを次のように指定することです:

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

transaction_nameこれはすべて、エンティティで呼び出されたTransactionか、ID を使用できることを前提としています。

于 2016-12-13T16:28:26.933 に答える