簡體   English   中英

如何將請求堆棧注入到枝條擴展中

[英]How to inject the request stack into a twig extension

我正在嘗試創建一個擴展來呈現分頁。 它需要請求和路由器才能創建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打印為null。 雖然如果我在setRequest方法中執行var_dump,它實際上會打印一個Request對象。 任何的想法? 謝謝!

構造樹枝擴展時,堆棧中沒有請求,它是空的。

您應該延遲從堆棧檢索請求到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();
}

我也在symfony谷歌小組問過這個問題,問題解決了...我有另一個services.yml導致沖突。 謝謝大家的時間https://groups.google.com/forum/?hl=zh-CN#topic/symfony2/pRJTYeAYmHE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM