2

SonataAdmin で KnplabsDoctrineBehaviors を使用する良い方法を探しています。

このバンドルの助けを借りて、ソナタ管理バンドルでフォームを既にレンダリングしています: https://github.com/a2lix/TranslationFormBundle 正常に動作し、翻訳を含むエンティティを正しく追加します。

Sonata でエンティティを一覧表示するには、これからハックを見つけました、Sonata-admin の listMapper でソート可能なプロパティを Nom に追加すると機能しません。

class Sport
{

     use \Knp\DoctrineBehaviors\Model\Translatable\Translatable;

     public function __call($method, $arguments)
    {
        return $this->proxyCurrentLocaleTranslation($method, $arguments);
    }   

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     private $id;

    // Need this method for the admin list template
    public function getNom(){
        return $this->translate()->getNom();
    }

    // Work even the precedent method not here, the proxy call work fine.
    public function __toString(){
        return $this->getNom();
    }
}

class SportTranslation
{
    use ORMBehaviors\Translatable\Translation;

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $nom;

    /**
     * @return string
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * @param  string
     * @return null
     */
     public function setNom($nom)
     {
         $this->nom = $nom;
     }
}

Nom で並べ替えようとすると、次のエラーが発生します。

Catchable Fatal Error: Argument 1 passed to
Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery::entityJoin()
must be of the type array, null given, called in
.../vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Datagrid/ProxyQuery.php
on line 140
and defined in
.../vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Datagrid/ProxyQuery.php
line 245

Nom が Sport に参加していないためだと思いますが、これを処理する方法がわかりません。

4

2 に答える 2

1

私自身この問題に遭遇したばかりなので、応答が少し遅くなります。これに対する解決策は実際にはかなり単純であることがわかりました。私の場合、記事のステータスとタイトルでフィルタリングできるようにしたかったのですが、タイトルは翻訳可能なフィールドです。これを機能させる方法は、次のように、translations リレーションシップを明示的に使用し、この子エンティティのフィールドを指定することでした。

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('translations.title', null, array('label' => 'Title'))
        ->add('status');
}

これがこの状況で他の誰かを助けることを願っています...

于 2013-08-16T10:30:13.510 に答える
0

私はついにhttps://github.com/symfony2admingenerator/AdmingeneratorGeneratorBundleに切り替えました。これは私の観点からはより柔軟です。解決策が機能するかどうかはわかりませんが、ほとんどの場合、並べ替えの際にすべての翻訳が考慮されます。

例えば:

  • Nom1 : fr : test1
  • Nom1 : en : test1
  • Nom2 : fr : test2
  • Nom2 : en : test0

nom で並べ替えたい場合は、次のようになります。

  • Nom2 : en : test0
  • Nom1 : fr : test1
  • Nom1 : en : test1
  • Nom2 : fr : test2

また

これ:

  • Nom2 : en : test2
  • Nom1 : fr : test1
  • Nom1 : en : test1
  • Nom2 : fr : test0

そのため、言語が考慮されていないため、常に Nom1 の前に Nom2 が表示されます。私はsymfony2admingeneratorでこれを簡単に解決できたので、切り替えます:-)

于 2013-08-16T19:32:38.843 に答える