2012-11-16 41 views
1

我有一些事情,我必須在每個動作中調用,比如從我的數據庫中獲取標籤,或者所有文章的編號等。
現在我總是在每個動作中激發其他函數我想要展示它。有沒有什麼辦法可以在不觸發適合當前路線的行爲的情況下觸發某些功能,並在這些功能中指定一些樹枝變量?Symfony2 - 在每個路由中調用一些操作

+0

我建議你閱讀一些關於symfony2的東西。那些你要求的,是symfony2的基本原則,並很好地解釋了網絡 – DonCallisto

+0

哦,謝謝。我讀過這本書。但我沒有在那裏找到答案。 –

+0

我的錯:初次不明白你的問題。 – DonCallisto

回答

2

感謝DonCallisto我做了這個:

<?php 

namespace Puzzle\InfobusBundle\EventListener; 

use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Bundle\TwigBundle\TwigEngine; 

class MyListener{ 
    protected $doctrine; 
    protected $templating; 
    protected $session; 
    protected $container; 


    /** 
    * @param ContainerInterface $container 
    */ 
    public function __construct($security, $doctrine, $session, $templating, $container){ 
     $this->doctrine=$doctrine; 
     $this->session=$session; 
     $this->templating=$templating; 
     $this->container=$container; 
    } 

    public function onKernelRequest() { 
     $this->container->get('twig')->addGlobal('myVar', 1234); 
    } 

而且在應用程序/配置/ config.yml:

services: 
    acme_my.exception.my_listener: 
     class: Acme\MyBundle\EventListener\MyListener 
     arguments: ["@security.context", "@doctrine", "@session", "@templating", "@service_container"] 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

現在onKernelRequest中的代碼在每個頁面上激活代碼,並且我可以發送一些變量來分支模板。

2

可以以這種方式行事:

  • 創建一個全球性的「假」行動,將接受特定的「類型」
  • 定義操作調度員的每一個請求(即服務)將路由(或用戶$router symfony2對象,只要您將路由名稱作爲參數傳遞給您的「假」動作即可)
  • 調用正確的操作後,執行所有需要執行的操作

所以,像這樣

public function actionDispatcher(Request $request, $route_name, $parameters) 
{ 
    /* retrieve the router */ 
    $router = $this->get('router'); 
    $myRouteDefaultsArray = $router->getRouteCollection->get('route_name')->getDefaults(); 
    /* retrieve the correct action */ 
    $myAction = $myRouteDefaultsArray['_controller']; 
    /*use your action here */ 
    [.....] 
    /* fire your functions here */ 
    [.....] 
    /* render the twig template along your variables here */ 
    [.....] 
} 

}

+0

看看我的片段。 –