我在使用 Gedmo\DoctrineExtensions Translatable 时遇到了一些问题。
首先是 APY DataGrid - 无法在非默认语言环境的网格中显示翻译的字符串。如果我使用默认设置的可翻译,网格中的所有字符串都以默认语言显示。如果我在 Entity 中实现 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');
当然,最好有翻译而不为它们制作注释和单独的实体。
第二个问题是 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;
}
任何帮助表示赞赏