2014-02-18 2 views
1

내 프로젝트에 silex 프레임 워크를 사용하고 있습니다. 사용자 지정 사용자 구현과 함께 SecurityServiceProvider를 사용하고 있습니다. 로그인/로그 아웃이 작동하고 symfony 프로파일 러에서 올바른 사용자 정보를 볼 수 있습니다 (세션 속성으로 저장 됨). 이제 사용자 지정 사용자 정보를 twig 환경에 추가하여 템플릿에서 액세스 할 수있게하려고합니다. 내가 환경을 확장하려고하고 작동나뭇 가지 서비스 제공 업체 silex에 맞춤 사용자 정보 추가

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) { 
    $token = $app['security']->getToken(); 
    $userInfo = null; 
    if (null !== $token) { 
     $userInfo = $token->getUser()->getTwigInfo(); 
    } 
    $twig->addGlobal('userinfo', $userInfo); 
    return $twig; 
})); 

그러나 사용자 정보가 나중에 처리 할 것으로 보인다 내 사용자 정보 속성은 항상 null입니다 : 내가 가지고 올 한 내용을 여기입니다. 나는 어떻게 든 나중에 나뭇 가지 환경을 확장해야만한다고 생각하지만 정확히 어떻게해야하는지 모릅니다. 누군가 나를 도울 수 있습니까?

답변

2

Silex를 사용하면 app 인스턴스를 Twig에서 직접 액세스 할 수 있습니다.

그래서 당신은 할 수 :

{{ app.security.token ? app.security.token.user.twigInfo : null }} 

또는

{% set userinfo = app.security.token ? app.security.token.user.twigInfo : null %} 

{{ userinfo }} 

당신이 당신의 PHP 코드 내에서 처리하려는 경우

는, 당신은 그런 새로운 정의
$app['userinfo'] = $app->share(function($app) { 
    $token = $app['security']->getToken(); 

    return (null !== $token) ? $token->getUser()->getTwigInfo() : null; 
})); 

를 만들 수 있습니다 Twig 템플릿에서

{{ app.userinfo }} 
+1

감사합니다. 작동합니다! 또한 이전 미들웨어를 사용하여 성공한 경우 솔루션이 더 깨끗하다고 ​​생각하십시오.) – maddob