gpt4 book ai didi

php - 如何在 Symfony 2 中返回实体的本地化属性

转载 作者:可可西里 更新时间:2023-11-01 00:46:19 26 4
gpt4 key购买 nike

我有一个“类别”实体包含

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

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

现在,我尝试在 View 中显示本地化名称,我可以使用以下方式显示其中一个:

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

所以我创建了一个名为 getName() 的方法,这样我就可以使用 {{ categories.name }}

我只需要访问语言环境,所以我使用 setter 和 getter 向实体添加了一个 protected $locale 属性,并在调用 View 之前设置了语言环境(我使用 @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()

如果我尝试在 $categoriesPagination 上使用 setLocale() 方法,它会失败并显示错误消息:FatalErrorException: Error: Call to undefined method Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination::setLocale()

有没有办法将语言环境传递给实体?还是有更好的方法来处理这种情况?

谢谢,

最佳答案

一般情况下,您不应该执行类似 propertyEnpropertyFr 的操作。

只需将您的翻译与区域设置属性一起存储,这使得在查询中从数据库中获取它们就像:

// example findByLocale($locale) method

->select('entity.property')
->from('AcmeMyBundle:Entity', 'entity')
// or inside a repository $this->createQueryBuilder('entity')

->where('entity.locale = :locale')
->setParameter('locale', $locale)

但这一切以前都做过……

您应该使用 Gemo\DoctrineExtensions\Translatable ,可以使用 Stof\DoctrineExtensionsBundle 轻松地与 symfony2 集成

... 或者我的提示,如果使用具有可用特征的 PHP 5.4+ KnpLabs\DoctrineBehaviors\Translatable .

为了将这些与您的表单很好地集成,请使用 a2lix\TranslationFormBundle .

参见 my answer here快速了解使用 DoctrineBehaviors\Translatable 和当前的语言环境代理,我发现这是一个非常舒适的解决方案。

只需创建类 EntityEntityTranslation,包括代理行 ... 调用 $entity->getProperty()

-> 自动应用当前语言环境。尽可能简单:-)

关于php - 如何在 Symfony 2 中返回实体的本地化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com