2012-11-11 3 views
3

사용자가 원하는 국가, 주 및 도시를 선택할 수있는 사이트를 구축 중입니다. 그는이 같은 페이지로 이동이 매개 변수를 선택하면자동으로 경로 매개 변수 전달

는 : en.example.com/spain/madrid/madrid/

문제는, 나는 새로운 URL을 구축 할 때마다, 나는이 세 변수를 전달해야하며, 내가 할 수 있는지 궁금 해서요 심포니 자체가 매개 변수에 전달하는 변수 인 _locale 변수와 같습니다.

감사

답변

2

더 검색 후 나는이 게시물을 발견 : 난 그냥 아이디어를 사용하고 내가 필요한 변화를 만들어이 내 확장에 대한 최종 코드

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} 

다른 사람에게 도움이되기를 바랍니다.

+1

고맙습니다. 심포니 2.5에서'$ this-> generator-> generate'는'$ this-> router-> generate'이어야합니다 –