2015-07-29 10 views
6

Tło: Chcę zmienić samodzielnie napisany rozszerzenie gałązki. klasa jest zdefiniowana w następujący sposób:Jak mogę sprawdzić, które parametry ma trasa w php

class pagination extends \Twig_Extension { 
    protected $generator; 

    public function __construct($generator){ 
     $this->generator = $generator; 
    } 

    .... 
} 

W jednej z metod chcę wygenerować URL tak:

$this->generator->generate($route, array('routeParam' => $value); 

Ale problemem jest to, że niektóre trasy nie mają param "routeParam", które spowoduje wyjątek podczas generowania trasy w ten sposób.

Moje pytanie brzmi: jak mogę się dowiedzieć, czy dana trasa ma określone parametry w tej metodzie?

+2

Jeśli wygenerować adres URL za pomocą przykładu na trasie, która nie wymaga parametru należy po prostu dodać go w '$ _GET' ciąg jak'/katalogu/URL? RouteParam = value'. – qooplmao

Odpowiedz

6

Aby sprawdzić swoją trasę ma wszystkie params musisz skompilować swoją trasę, aby opracować trasę trzeba Service Router więc przechodzić @service_container usługę do rozszerzenia gałązka dodając w swojej definicji usługi

somename.twig.pagination_extension: 
    class: Yournamesapce\YourBundle\Twig\Pagination 
    arguments: [ '@your_generator_service','@service_container' ] 
    tags: 
     - { name: twig.extension } ... 

iw swoim class get container, następnie pobierz usługę routera z kontenera i uzyskaj wszystkie trasy przez getRouteCollection(), gdy wszystkie trasy uzyskają żądaną trasę od zbierania przez $routes->get($route), a następnie skompilują tę trasę, po uzyskaniu zadowalającej definicji trasy można uzyskać wszystkie parametry wymagane dla trasy przez wywołanie getVariables(), które zwróci tablicę parametrów i przed wygenerowaniem tablicy check, jeśli routeParam istnieje

use Symfony\Component\DependencyInjection\ContainerInterface as Container; 
class Pagination extends \Twig_Extension { 
    protected $generator; 
    private $container; 
    public function __construct($generator,Container $container){ 
     $this->generator = $generator; 
     $this->container = $container; 
    } 

    public function somefunction(){ 
     $routes = $this->container->get('router')->getRouteCollection(); 
     $routeDefinition = $routes->get($route); 
     $compiledRoute = $routeDefinition->compile(); 
     $all_params = $compiledRoute->getVariables(); 
     if(in_array('routeParam',$all_params)){ 
      $this->generator->generate($route, array('routeParam' => $value); 
     } 
    } 
    .... 
} 
+1

To dokładnie rozwiązało proplem. Dzięki – Benjamin