2015-02-23 2 views
3

Я пытаюсь создать расширение для визуализации разбиения на страницы. Она нуждается в запрос и маршрутизатор, чтобы иметь возможность создать URL, так что я сделал это:Как вставить стек запроса в расширение веточки

services.yml:

app.twig_extension: 
    class: MyBundle\Twig\MyExtension 
    public: false 
    calls: 
     - [setRequest, [@request_stack]] 
     - [setRouter, [@router]] 
    tags: 
     - { name: twig.extension } 

Тогда в моем расширения:

private $router; 

private $request; 

public function setRouter(UrlGeneratorInterface $router) 
{ 
    $this->router = $router; 
} 

public function setRequest(RequestStack $requestStack) 
{ 
    $this->request = $requestStack->getCurrentRequest(); 
} 

...

public function renderPaginator(\Twig_Environment $twig, $paginator, array $options = array()) 
{ 

    if (1 == $paginator->getNumPages()) 
    { 
     return false; 
    } 
    var_dump($this->request); 
    die(); 

Оказывается, что var_dump печатает нуль. Хотя, если я делаю этот var_dump в методе setRequest, он фактически печатает объект Request. Любая идея? Благодаря!

ответ

3

При построении расширения ветки, в стек еще нет запросов, он пуст.

Вы должны отложить извлечение запроса из стека методу renderPaginator().

Определение сервиса:

app.twig_extension: 
    class: MyBundle\Twig\MyExtension 
    public: false 
    arguments: [@request_stack, @router] 
    tags: 
     - { name: twig.extension } 

Услуги:

public function __construct(RequestStackInterface $requestStack, RouterInterface $router) 
{ 
    $this->requestStack = $requestStack; 
    $this->router = $router; 
} 

public function renderPaginator(\Twig_Environment $twig, $paginator, array $options = array()) 
{ 

    if (1 == $paginator->getNumPages()) 
    { 
     return false; 
    } 
    var_dump($this->requestStack->getCurrentRequest()); 
    die(); 
} 
+0

Я попытался, но получил «Вызов функции-члена getCurrentRequest() для ошибки, не связанной с объектом». Я изменил метод setRequestStack, и если я делаю var_dump ($ this-> requestStack) по методу paginator, я получил null. Я использую symfony 2.6 btw – petekaner

+0

Проверьте измененное определение службы. На самом деле вы, вероятно, даже должны делать инъекцию конструктора вместо инъекции сеттера, чтобы избежать таких проблем. – Gerry

+0

Mmm no, не работает либо «Аргумент 1, переданный в SeoReportBundle \ Twig \ SeoReportExtension :: __ construct() должен быть экземпляром Symfony \ Component \ HttpFoundation \ RequestStack, не указан« – petekaner

Смежные вопросы