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 に参加していないためだと思いますが、これを処理する方法がわかりません。