[英]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.