2012-05-29 3 views
5

그래서,이 청취자를 알아 내기 위해 노력하고있어하지만 난 그들에 관한 심포니 사이트에서 정보를 찾는 문제가있어 .. 처음는 Symfony2는 이벤트 리스너

, 나는 트리거 할 리스너를 만들고 싶었 모든 페이지로드 ... 나는 그것이 전반적인 시스템 성능에 해를 끼칠 수 있다고 생각 했으므로 다음과 같이 트리거해야한다고 생각했습니다./및/otherpage

하지만 다시, 청취자와 함께 시작하십시오. 어떤 도움을 주셨습니다.이 모든 청취자는 Doctrine을 사용하여 데이터베이스를 확인하고 발견 한 내용에 따라 세션을 설정합니다.

다시 한 번 도움이나 제안을 보내 주시면 감사하겠습니다. 감사.

답변

10

하위 도메인을 확인하는 것과 비슷한 작업을 수행했습니다.

services: 
    page_load_listener: 
     class: Acme\SecurityBundle\Controller\PageLoadListener 
     arguments: 
      security: "@security.context", 
      container: "@service_container" 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 } 

내가은 (는) 우선적으로 실행되지 않을 것이다 너무 높게 설정되어있는 경우 내가 찾은 방법 우선 순위 작동하지만 정확히 모르겠어요 : 다음과 같이 설정 파일에 서비스로 청취자를 넣어 수 있습니다 응용 프로그램의 좀 더 연구 할 일 목록에 있습니다.

다음은 수신기의 모양을 보여주는 예입니다.

namespace Acme\SecurityBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Security\Core\SecurityContext; 
use Symfony\Component\HttpKernel\Event\GetResponseEvent; 

class PageLoadListener extends controller 
{ 
    private $securityContext; 
    protected $container; 
    protected $query; 

    public function __construct(SecurityContext $context, $container, array $query = array()) 
    { 
     $this->securityContext = $context; 
     $this->container = $container; 
     $this->query = $query; 
    } 

    public function onKernelRequest(GetResponseEvent $event) 
    {  
     //if you are passing through any data 
     $request = $event->getRequest(); 

     //if you need to update the session data 
     $session = $request->getSession();    

     //Whatever else you need to do... 

    } 
} 

나는 특정 페이지에 게재하도록 설정하는 가장 좋은 방법의 확실하지 않다,하지만 내 추측이 경로를 확인하는 단지는 경로 일치 당신이 무엇을 설정하여 DB를 칠 것이다.

희망이 시작됩니다.

그레그

+0

감사합니다. 그렉! 나는 주위에 놀고 내가 이것으로 생각해 낼 수있는 것을 보게 될 것이다 ... 나는 심지어 모든 페이지로드를 점검하는 것으로 얻을 수있다. (모든 쿼리는 DB를 점검하여 거기 있는지 확인한다. 오늘은 사용자를위한 항목입니다.) .. 다시 한 번 감사드립니다! – Justin

+0

문제 없습니다. 각 페이지로드에서 리스너 함수를 호출하는 것에 대해 너무 걱정하지 않아도됩니다. 성능에 아무런 영향을주지 않아야하는 작은 서비스이므로 매번 DB를 수신하는 리스너를 피하기위한 방법을 찾으십시오. 특별히 필요하지 않는 한. 당신이 어떻게 가는지, 문제가 있으면 도와 드리겠습니다. – greg

+0

동일한 일을하고 있지만 Listener 쿼리에서 아무 것도 발견되지 않으면 모든 것을 단락시키고 "출시 예정"템플릿 페이지로 리디렉션하려고합니다. 리스너에서 어떻게 구성 할 것인가? 감사! – Acyra