2015-07-29 5 views
6

पृष्ठभूमि: मैं स्वयं लिखित ट्विग एक्सटेंशन को बदलना चाहता हूं। वर्ग इस प्रकार परिभाषित किया गया है:मैं कैसे पता लगा सकता हूं कि एक मार्ग में PHP के पैरामीटर

class pagination extends \Twig_Extension { 
    protected $generator; 

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

    .... 
} 

तरीकों में से एक में मैं इस तरह एक यूआरएल उत्पन्न करना चाहते हैं:

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

लेकिन समस्या यह है, कि कुछ मार्गों परम की जरूरत नहीं है इस मार्ग को उत्पन्न करते समय 'मार्गपाराम' कौन सी अपवाद पैदा करेगा।

मेरा प्रश्न है: मैं कैसे पता लगा सकता हूं कि किसी दिए गए मार्ग में उस विधि में कुछ पैरामीटर हैं?

+2

आप एक मार्ग है कि पैरामीटर यह सिर्फ '/ अपने/यूआरएल? RouteParam = मान' तरह' $ _GET' स्ट्रिंग में यह जोड़ना चाहिए की आवश्यकता नहीं है के लिए अपने उदाहरण का उपयोग करते हुए एक यूआरएल उत्पन्न है। – qooplmao

उत्तर

6

अपने मार्ग की जांच करने के सभी पैरामीटर आप अपने मार्ग को संकलित करने, मार्ग संकलित करने के लिए आप रूटर सेवा की जरूरत है ताकि आपकी सेवा परिभाषा

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

और में में जोड़कर अपने टहनी विस्तार करने के लिए @service_container सेवा उत्तीर्ण करनी है आपके कक्षा को कंटेनर प्राप्त करने के बाद कंटेनर से राउटर सेवा प्राप्त करें और getRouteCollection() तक सभी मार्ग प्राप्त करें, जब आपके पास सभी मार्गों को $routes->get($route) द्वारा वांछित मार्ग प्राप्त करने के लिए प्राप्त करें, तो उस मार्ग को संकलित करें, एक बार जब आपकी एक अनुरुप मार्ग परिभाषा हो, तो आप मार्ग के लिए आवश्यक सभी पैराम प्राप्त कर सकते हैं getVariables() पर कॉल करना जो पैरामीटर की सरणी वापस करेगा और सरणी में चेक उत्पन्न करने से पहले routeParam मौजूद

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

कि वास्तव में प्रॉपल हल किया। धन्यवाद – Benjamin

संबंधित मुद्दे