Php 在每一页上调用一个路由

Php 在每一页上调用一个路由,php,symfony,symfony-2.3,Php,Symfony,Symfony 2.3,我有个问题。我添加了一个新服务PopupListener.php: services.yml: popup_listener: class: App\DesktopBundle\Listeners\PopupListener arguments: ["@router"] tags: - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } rout

我有个问题。我添加了一个新服务PopupListener.php:

services.yml:

popup_listener:
    class: App\DesktopBundle\Listeners\PopupListener
    arguments: ["@router"]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
routing.yml:

app_popup_trigger:
    path: /popup/trigger
    defaults: { _controller: AppDesktopBundle:Popup:triggerPopup }
triggerPopupAction:


我希望在每次路线呼叫时添加新路线:
app\u popup\u trigger
。我做了一些这样的想法,但没有工作。这条路线没有被调用。您能帮我吗?

要在每次请求开始时调用特定路由,您只需在PopupListener中扩展您的代码:

使用Symfony\Bundle\FrameworkBundle\Routing\Router;
使用Symfony\Component\DependencyInjection\ContainerInterface;
使用Symfony\Component\HttpFoundation\Request;
使用Symfony\Component\HttpKernel\Event\GetResponseEvent;
使用Symfony\Component\HttpKernel\HttpKernelInterface;
类扩音器
{
受保护的路由器;
受保护的$httpKernel;
公共函数构造(路由器$Router,HttpKernelInterface$httpKernel)
{
$this->router=$router;
$this->httpKernel=$httpKernel;
}
onKernelRequest公共函数(GetResponseEvent$事件)
{
if(HttpKernelInterface::MASTER_REQUEST!==$event->getRequestType()){
返回;
}
$subRequest=Request::create($this->router->generate('app\u popup\u trigger'));
$response=$this->httpKernel->handle($subRequest,HttpKernelInterface::SUB_REQUEST);
//在这里对$response执行一些操作
}
}
Symfony将仅为此子请求启动一个新的请求-响应周期,并将返回此周期的
$response
。然后你必须决定你用这个反应做什么

然后将附加服务添加到服务配置中:

popup_listener:
    class: App\DesktopBundle\Listeners\PopupListener
    arguments: ["@router", "@http_kernel"]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

您可以在此处获得有关symfony sub请求的更多信息:。我链接了Symfony 2.3的文档。但是请记住,SyfFoice 2.3不再被维护,你应该考虑升级到3。X.

基本上使用和使用JavaScript触发你的路由。这将比弹出窗口的侦听器更容易。

Symfony 2.3不再维护。您应该升级到Symfony 3.x。除此之外,我真的不明白你想要实现什么。“我希望在每个路由调用添加的新路由:
app\u popup\u trigger
”是什么意思?想法是在每个请求调用此api
app\u popup\u trigger
我得到错误:
“找不到“get/app\u dev.php/popup/trigger”的路由”在/var/www/app/vendor/symfony/symfony/src/symfony/Component/HttpKernel/EventListener/RouterListener.php
中,如果您只是在浏览器中请求
/app\u dev.php/popup/trigger
,会发生什么?
class PopupController extends Controller{
    public function triggerPopupAction(){
        return $this->render('AppDesktopBundle:Popup:index.html.twig', array());
    }
}
popup_listener:
    class: App\DesktopBundle\Listeners\PopupListener
    arguments: ["@router", "@http_kernel"]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }