0

Gedmo\DoctrineExtensions Translatable の使用にいくつか問題があります。

最初は APY DataGrid です。デフォルト以外のロケールでは、翻訳された文字列をグリッドに表示できません。Translatable をデフォルト設定で使用すると、グリッド内のすべての文字列がデフォルト言語で表示されます。エンティティに Translatable を実装し、テーブルやその他のものに注釈を追加すると、翻訳された文字列がグリッドに表示されますが、ロケールを切り替えた後もこれらは同じままです。QueryCache を使用しているようですが、使用しないように設定する方法が見つかりません。グリッドの一部は次のとおりです。

use APY\DataGridBundle\Grid\Source\Entity;

<...>

$source = new Entity('MainBundle:Entity');
$source->addHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');

もちろん、注釈を作成せずに翻訳を行い、エンティティを分離した方がよいでしょう。

2 番目の問題は、KNP ページネーションです。実際には掘り下げませんでしたが、同様の問題。

主な問題は、エンティティの翻訳可能なフィールドでクエリを実行するときです。Krepšinis (リトアニア語でバスケットボール)という名前のエンティティがあり、この文字列をBasketballに翻訳したとします。デフォルトの言語はLTです。デフォルト言語で検索を実行すると、すべて問題ありませんが、ロケールをENに変更してBasketを検索しようとすると、結果が返されず、 krepを検索するとBasketballが返されます。検索用コード:

// Controller

$repository = $this
    ->getDoctrine()
    ->getManager()
    ->getRepository('MainBundle:Entity');

$query = $repository
    ->search($term)
    ->getQuery()
    ->useQueryCache(false)
    ->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');



// Repository

public function search($query)
{
    $qb = $this->createQueryBuilder('t');
    $term = $qb->expr()->literal('%' . $query . '%');
    $query = $qb->where($qb->expr()->like('t.name', $term));

    return $query;
}

どんな助けでも大歓迎です

4

1 に答える 1