我正在尝试创建扩展以呈现分页.它需要请求和路由器才能创建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,request,php
来源: https://codeday.me/bug/20191028/1953916.html