knplabs で DoctrineBehaviors を使用する良い方法を探しています。
このバンドルの助けを借りて、ソナタ管理バンドルでフォームをすでにレンダリングしています: https://github.com/a2lix/TranslationFormBundle
今、私は翻訳されたフィールドを管理者リストに入れたいと思っています。
現時点では、次の方法で動作します。
/**
* @ORM\Entity
* @ORM\Table(name="sport")
*/
class Sport
{
...
public function getNom(){
return $this->translate()->getNom();
}
}
それはうまくいきましたが、元のエンティティのすべての翻訳済みフィールドを再マップする必要があります。特に代理翻訳の魔法に関しては、何かが欠けていると確信しています。
アップデート:
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;
}
}
@nifr さん、素早い返信ありがとうございます。プロキシ メソッドはコントローラーで動作します (スポーツの __toString メソッドを試してみましたが、問題なく動作しています)。
しかし、問題はどうやらソナタ管理バンドルから来ているようです。テンプレートコードを確認しましたが、なぜ機能しないのかわかりません。
より良い解決策が見つかるまで、私は醜い方法を維持します。
現時点では、管理リスト テンプレートに値を出力する唯一の方法です。
もっと良いものを見つけたら、この投稿を更新します。