2014-10-28 2 views
4

사용자가 로그인했는지 확인하고 싶습니다. 전에 작업이 호출되기 전에 확인하십시오.Symfony 2 : 모든 컨트롤러 동작 전에 코드를 실행하는 방법은 무엇입니까?

Symfony\Bundle\FrameworkBundle\Controller\Controller의 경우 preDispatch()과 같은 것이 좋습니다.

나는이를 방지 싶습니다 난 그냥 2011/2012에서 주제를 발견

class MyBaseController extends Controller { 
    public function __construct() { 
     // ... 
     // check: logged in? 
     // ... 
    } 
} 

class MyFooController extends MyBaseController() { 
    // ... 
} 

. Symfony를 처음 접했을 때 버전 2.5를 사용했고 처음부터 모범 사례 권리를 알고 싶습니다. 조언? 사전에

감사합니다!

편집 :

흥미로운 : http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html

답변

12

1/당신이 할 수있는 setup before (and also after) filters with the kernel.controller Event. 다음은 the documentation의 좋은 예입니다.

2

는/당신은 또한 이벤트 리스너 listens to the kernel.request event을 만들고 사용자가 어떤 컨트롤러를 대상으로 이전에 인증 여부를 확인 할 수 있습니다.

HttpKernel에 의해 처음으로 전달되는 이벤트로, 요청에 정보를 추가하거나 필요할 때 초기 응답을 반환하는 데 주로 사용됩니다 (예 : 인증되지 않은 사용자 또는 액세스 권한이없는 사용자의 액세스를 거부하는 경우). 주어진 자원).

the kernel.controller event에 수신기를 만들 수도 있습니다 (이전에 설명한 설명서의 예에서 설명). 이 이벤트는 HttpKernel에 의해 컨트롤러 호출 가능이 결정된 후에 전달됩니다. 컨트롤러가 실행되기 전에 주로 초기화하는 데 사용됩니다. 컨트롤러를 변경하는 데에도 사용됩니다.

을 읽으면 Symfony가 내부적으로 어떻게 작동하는지 전체적으로 알 수 있습니다.

3/당신은 또한 컨트롤러에 대한 액세스를 제한하는 @Security annotation, 나는 "필터 전에"을 허용 심포니 요리 책의 기반 번들을 만든

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; 

class MyFooController extends Controller 
{ 
    /** 
    * @Security("has_role('ROLE_USER')") 
    */ 
    public function anyAction() 
    { 
     // ... 
+1

를 사용할 수 있습니다. https://github.com/expertcoder/before-after-bundle 번들에 대한 건설적인 비판을 유용하게 사용하시기 바랍니다. 감사 – Sam

관련 문제