【发布时间】:2017-11-20 06:24:27
【问题描述】:
我正在设置一个服务以在控制器之前运行以初始化一些服务器变量。
这个服务应该只在它是主请求时才运行,我认为这应该只是一个页面请求。
到目前为止,我设法让它运行起来,但它似乎没有给出预期的结果。如果它是主请求,它似乎运行了几次,否则只运行一次。当然,我可能只是误读了。
在下面的代码中,下面的行应该标识主请求:
($this->stack->getParentRequest() == null)
那么下面的 session['page_ct'] 对于每个新页面都应该增加 1,但它会增加 2。如果我将代码更改为 != null,它只会增加 1。
($this->session->has('page_ct') ? $this->session->set('page_ct', $this->session->get('page_ct') + 1 ): $this ->session->set('page_ct', 1 ));
这是设置:
app/config/services.yml
services:
app.initializer_listener:
class: AppBundle\EventListener\InitializerListener
arguments: ['@session','@request_stack']
tags:
- { name: kernel.event_listener, event: kernel.controller, method: InitializerAction }
和初始化器(仅骨架代码);
/src/AppBundle/EventListener/InitializerListener.php
namespace AppBundle\EventListener;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
class InitializerListener
{
private $session;
private $event;
private $stack;
public function __construct(Session $session, RequestStack $requestStack )
{
$this->session = $session;
$this->stack = $requestStack;
}
public function InitializerAction(){
if ($this->stack->getParentRequest() == null) { ********
$this->sessionInit();
}
}
private function sessionInit ()
{
$this->session->set('active', time() );
($this->session->has('page_ct') ? $this->session->set('page_ct', $this->session->get('page_ct') + 1 ): $this->session->set('page_ct', 1 ));
}
}
【问题讨论】:
-
你的问题是?
-
@hakre。为了您的利益,我将重复一遍:然后,对于每个新页面,下面的 session['page_ct'] 应该增加 1,但它会增加 2。如果我将代码更改为 != null,它只会增加 1。
-
那不是问题,那是描述。你的问题是什么?如何确定一个请求是主请求?或者:主请求是否构造了所有允许决定每个请求的单个操作的属性?
-
您似乎从根本上误解了听众的使用。尝试让文档中的那个工作,然后调整它。调用某种初始化的东西是没有意义的。
-
你应该有一个 onController(FilterControllerEvent $event) 而不是你的初始化方法
标签: php symfony session request