3

を含む「カテゴリ」エンティティがあります

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

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

今、私はローカライズされた名前をビューに表示しようとしています。次を使用してどちらかを表示できます。

{{ categories.nameFr }} and {{ categories.nameEn }}

getName()だから私は私が使用できるように呼ばれるメソッドを作りました{{ categories.name }}

ロケールにアクセスするだけでよかったのでprotected $locale、setter と getter を使用してエンティティにプロパティを追加し、ビューを呼び出す前にロケールを設定しました (ちなみに、リターンには @Template を使用しています)。

$locale = $this->getRequest()->getLocale();
$categories->setLocale($locale);

return array(
    'categories' => $categories
);

これは機能していましたが、エンティティの代わりにクエリを送信する必要があるページネーション バンドルKnpLabs/KnpPaginatorBundleを実装しました。

$em = $this->getDoctrine()->getManager();

$categoriesQuery = $em->createQueryBuilder()
    ->select('category')
    ->from('OylexCategoryBundle:Category', 'category')
;

$locale = $this->getRequest()->getLocale();

$categoriesQuery->setLocale($locale);

$paginator  = $this->get('knp_paginator');
$categoriesPagination = $paginator->paginate(
    $categoriesQuery,
    $this->get('request')->query->get('page', 1),
    30
);

return array(
    'categoriesPagination' => $categoriesPagination
);

これはエラー メッセージで失敗します: FatalErrorException: Error: Call to undefined method Doctrine\ORM\QueryBuilder::setLocale()

代わりにメソッドを試してみるとsetLocale()$categoriesPagination次のエラー メッセージで失敗します。FatalErrorException: Error: Call to undefined method Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination::setLocale()

ロケールをエンティティに渡す方法はありますか? または、この状況を処理するためのより良い方法はありますか?

ありがとう、

4

1 に答える 1