私は symfony2 プロジェクトを作成しており、翻訳可能な 2 つのフィールドを持つクラスを取得しました。フォームには、symfony2 バージョン 2.2 のバンドルa2lixを使用します
その部分は正常に機能しており、エンティティと対応する entityTranslator がデータベースに入力されています。しかし問題は、エンティティのコンテンツを表示しようとすると、実際のロケールではなく、これらのフィールドが常にデフォルトのロケールで表示されることです。
私のエンティティ:
/**
* Product
*
* @ORM\Table(name="ecm_product")
* @ORM\Entity(repositoryClass="Entity\Repository\ProductRepository")
* @Gedmo\TranslationEntity(class="Entity\Translation\ProductTranslation")
*/
class Product{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Gedmo\Translatable
*/
protected $name;
/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=255, nullable=true)
*/
protected $slug;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=true)
* @Gedmo\Translatable
*/
protected $description;
/**
* @ORM\OneToMany(
* targetEntity="Entity\Translation\ProductTranslation",
* mappedBy="object",
* cascade={"persist", "remove"}
* )
* @Assert\Valid(deep = true)
*/
private $translations;
public function getTranslations() {
return $this->translations;
}
public function setTranslations($translations) {
foreach ($translations as $translation) {
$translation->setObject($this);
}
$this->translations = $translations;
return $this;
}
/**
* Remove translation
*
* @param Entity\Translation\ProductTranslation $translation
*/
public function removeTranslation(Entity\Translation\ProductTranslation $translation)
{
if ($this->translations->contains($translation)) {
$this->translations->removeElement($translation);
}
}
/**
* Add translation
*
* @param Entity\Translation\ProductTranslation $translation
* @return PrivacyPolicy
*/
public function addTranslation(Entity\Translation\ProductTranslation $translation)
{
if (!$this->translations->contains($translation)) {
$this->translations[] = $translation;
$translation->setObject($this);
}
return $this;
}
}
私のエンティティ翻訳:
/**
* Entity\Translation\ProductTranslation.php
* @ORM\Entity
* @ORM\Table(name="ecm_product_translations",
* uniqueConstraints={@ORM\UniqueConstraint(name="lookup_unique_idx", columns={
* "locale", "object_id", "field"
* })}
* )
*/
class ProductTranslation extends AbstractPersonalTranslation
{
/**
* @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="translations")
* @ORM\JoinColumn(name="object_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $object;
public function getObject() {
return $this->object;
}
public function setObject($object) {
$this->object = $object;
}
}
そして、私のリポジトリでは、常に次の行を追加します。
$qb->getQuery()->setHint(
\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
);
しかし、私のエンティティは翻訳されていません:s