【发布时间】:2015-02-10 15:16:48
【问题描述】:
我正在使用 knpPaginatorBundle,我想按国家 name(或如果可能的话按翻译的国家名称)而不是国家 code 对结果进行排序,因为名称根据语言环境“en、fr、de ..”进行更改。
例如 Spain 在英语中以 S 开头,在法语中是 Espagne 并以 E 开头,但是代码是“ES”,当然是不可更改的。可以这样做吗?
这是我的代码:
树枝
<li class="sort-by-country {% if pagination.isSorted('t.country') %}active{% endif %}">{{ knp_pagination_sortable(pagination, 'Country', 't.country') }}</li>
控制器:
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();
$paginator = $this->get('knp_paginator');
$qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();
$pagination = $paginator->paginate(
$qb,
$request->query->get('page', $page),10);
return $this->render('ProjectFrontendBundle:Travel:travel-list-view.html.twig',array(
'pagination' => $pagination,
));
}
存储库
//getListTravelsFrontend
public function getListTravelsFrontend()
{
$qb = $this->createQueryBuilder('t')
->leftJoin('t.image', 'i')
->addSelect('i')
->leftJoin('t.agence', 'a')
->addSelect('a')
->Where('t.enabled = 1');
return $qb;
}
实体:
class Travel
{
/**
* @ORM\Column(name="country", type="string", length=5, nullable=false)
*
* @Assert\Country
*/
protected $country;
这是显示国家名称的方法,我使用此扩展程序,效果很好
namespace Project\TravelBundle\Twig;
class CountryExtension extends \Twig_Extension {
public function getFilters()
{
return array(
new \Twig_SimpleFilter('country', array($this, 'countryFilter')),
);
}
public function countryFilter($countryCode,$locale = "en")
{
$c = \Symfony\Component\Intl\Intl::getRegionBundle()->getCountryNames($locale);
return array_key_exists($countryCode, $c)
? $c[$countryCode]
: $countryCode;
}
public function getName()
{
return 'country_extension';
}
}
【问题讨论】:
-
您的旅行舱有国家名称字段还是只有国家代码字段?
-
@DerickF ,旅行舱只有一个国家代码,可以用国家名称代替国家代码吗?
标签: php symfony doctrine-orm