2017-09-05 94 views
0

我有問題。我添加了一個新的服務PopupListener.php: 在每頁上撥打一個路線

use Symfony\Bundle\FrameworkBundle\Routing\Router; 
use Symfony\Component\DependencyInjection\ContainerInterface; 


class PopupListener 
{ 
    protected $router; 

    public function __construct(Router $router) 
    { 
     $this->router = $router; 
    } 

    public function onKernelRequest() 
    { 
     $this->router->generate('app_popup_trigger'); 
    } 
} 

services.yml:

​​

的routing.yml:

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

的triggerPopupAction:

class PopupController extends Controller{ 
    public function triggerPopupAction(){ 
     return $this->render('AppDesktopBundle:Popup:index.html.twig', array()); 
    } 
} 

我希望在每個路由呼叫中添加新路由:app_popup_trigger。我做了這樣的事情,但沒有工作。路由不被調用。你能幫我嗎 ?

+0

Symfony 2.3不再被維護。你應該升級到Symfony 3.x.除此之外,我並不真正瞭解你想達到的目標。 「我希望在每個路由調用中添加新的路由:'app_popup_trigger'」是什麼意思? –

+0

這個想法是在每個請求調用這個API'app_popup_trigger' – user7424312

回答

1

基本上使用FOSJsRoutingBundle並用javascript觸發你的路線。這比聽衆更容易彈出。

0

要調用在每個請求開始時的具體路線,你只需要在你的PopupListener擴展代碼:

use Symfony\Bundle\FrameworkBundle\Routing\Router; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpKernel\Event\GetResponseEvent; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 

class PopupListener 
{ 
    protected $router; 

    protected $httpKernel; 

    public function __construct(Router $router, HttpKernelInterface $httpKernel) 
    { 
     $this->router = $router; 
     $this->httpKernel = $httpKernel; 
    } 

    public function onKernelRequest(GetResponseEvent $event) 
    { 
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
      return; 
     } 

     $subRequest = Request::create($this->router->generate('app_popup_trigger')); 
     $response = $this->httpKernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST); 
     // do something with the $response here 
    } 
} 

的Symfony將開始一個新的請求 - 響應週期只是這個子請求和將返回該週期的$response。然後你必須決定你在做什麼。

,然後添加額外的服務,您的服務配置:

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

你能得到關於symfony的子請求這裏的更多信息:The HttpKernel Component - Sub Request。我鏈接了Symfony 2.3的文檔。但請記住Symfony 2.3不再被維護,你應該考慮升級到3.x.

+0

我得到的錯誤:'「GET /app_dev.php/popup/trigger」在/ var/www/app/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php' – user7424312

+0

如果你只是在你的瀏覽器中請求'/ app_dev.php/popup/trigger',會發生什麼? –