더 검색 후 나는이 게시물을 발견 : 난 그냥 아이디어를 사용하고 내가 필요한 변화를 만들어이 내 확장에 대한 최종 코드
http://blog.viison.com/post/15619033835/symfony2-twig-extension-switch-locale-current-route
<?php
namespace Comehoy\CoreBundle\Twig\Extension;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
class PathExtension extends \Twig_Extension
{
private $request;
private $router;
public function __construct(Router $router) {
$this->router = $router;
}
public function onKernelRequest(GetResponseEvent $event) {
if ($event->getRequestType() === HttpKernel::MASTER_REQUEST) {
$this->request = $event->getRequest();
}
}
public function getFunctions()
{
return array(
'l10n_path' => new \Twig_Function_Method($this, 'getPath')
);
}
public function getPath($name, $parameters = array())
{
$parameters = array_merge($parameters, [
'country' => $this->request->get('country'),
'state' => $this->request->get('state'),
'city' => $this->request->get('city'),
]);
return $this->generator->generate($name, $parameters, false);
}
public function getName()
{
return 'twig_my_path_extension';
}
}
그리고 구성은 게시글과 동일합니다.
services:
twig.localized_route_extension:
class: Acme\CoreBundle\Twig\PathExtension
tags:
- { name: twig.extension }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
arguments: [@router]
그리고 내가 국가, 주 및 도시를 사용하는 경로의 경우 각 경로에서 반복하지 않도록 접두사를 붙였습니다.
acme_core:
resource: "@AcmeCoreBundle/Controller/"
type: annotation
prefix: /{country}/{state}/{city}
다른 사람에게 도움이되기를 바랍니다.
고맙습니다. 심포니 2.5에서'$ this-> generator-> generate'는'$ this-> router-> generate'이어야합니다 –