2012-11-11 60 views
3

我正在構建一個網站,用戶可以選擇他想要的國家,州和城市。自動傳遞路徑參數

一旦他選擇這些參數,他去這樣的頁面:en.example.com/spain/madrid/madrid/

的問題是,我想建立一個新的URL每次,我必須通過這3個變量,我在想,如果我能做到有些東西可以使它們變得像_locale變量一樣,symfony自身將它傳遞給參數。

感謝

回答

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] 

對於我使用國家,州和城市的路線,我將它們放在前綴中以避免在每條路線中重複它們。

​​

希望它可以幫助別人。

+1

非常感謝您的支持!在symfony 2.5中'$ this-> generator-> generate'應該是'$ this-> router-> generate' –