2016-07-14 19 views
1

需要一些建議。 我想更新現在看到的文章。 首先,我將EM注入偵聽器。但是,解析url以獲取文章ID爲symfony加載文章不夠漂亮,就像我看來的那樣。Symfony將一些實體注入偵聽器

services: 
    app.articles.action_listener: 
     class: FrontendBundle\EventListener\ArticleListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.controller, method: onKernelController } 
     arguments: ['@doctrine.orm.entity_manager'] 

是否有任何選項可以讓如控制器中發生的實體一樣?

/** 
* @Route("/{id}", requirements={"page": "\d+"}, name="article_view_full") 
* 
* @param Article $article 
* 
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response 
*/ 
public function viewAction(Article $article) 

UPDATE

/** 
* Class ArticleListener 
* @package FrontendBundle\EventListener 
*/ 
    class ArticleListener 
    { 
     /** 
     * @type EntityManager 
     */ 
     private $manager; 

     /** 
     * ArticleListener constructor. 
     * 
     * @param EntityManager $manager 
     */ 
     public function __construct(EntityManager $manager) 
     { 
      $this->manager = $manager; 
     } 

     /** 
     * @param $event 
     */ 
     public function onKernelController($event) 
     { 

      $controller = $event->getController(); 

      if (!is_array($controller)) { 
       return; 
      } 

      if ($controller[0] instanceof ArticlesController && $controller[1] == 'viewAction') { 
       // THIS IS THE FULL ARTICLE VIEW. HERE I NEED TO GET CURRENT ARTICLE INSTANCE AND UPDATE VIEWS COLUMN IN DB. 
      } 
     } 
    } 

THX的任何幫助。

+0

我們能否看到您的ArticleListener?你爲什麼不更新你的實體在這個聽衆? –

回答

0

可以解析服務容器作爲參數

arguments: ['@doctrine.orm.entity_manager','@service_container'] 

然後拿到參數...

public function __construct($em, Container $container ) { 
    $this->em = $em; 
    $this->container = $container; 
    $rq     = $this->container->get('request_stack'); 
    $rq     = $rq->getCurrentRequest(); 
    $parameters   = explode('/', $rq->getRequestUri()); 

你也可以從事件的請求時:

$request = $event->getRequest(); 
+0

我認爲這不是以symfony的方式.... – Tapakan

相關問題