2012-07-31 3 views
1

내 프로젝트의 Twig 확장을 만들려고합니다. 목표는 멋진 툴팁에 AJAX 쿼리의 결과를 표시 할 수있는 jquery.cluetip 플러그인으로 사용자 팝업을 생성하는 것입니다. 생성 된 HTML 코드는 다음과 같아야합니다Symfony2 + 나뭇 가지 - 내 필터에 TwigBundle의 경로() 사용

<span class="userdata" rel="/profile/123/ajaxUserdata.html">W00d5t0ck</span> 

는 현재, 내 코드는 다음과 같습니다

이제
class UserDataSpanExtension extends \Twig_Extension 
{      
    protected $_securityContext; 

    public function __construct(SecurityContextInterface $security) 
    { 
     $this->_securityContext = $security; 
    } 

    public function getFilters() 
    { 
     return array(
      'userdataspan' => new \Twig_Filter_Method($this, 'getUserDataSpan', array('is_safe' => array('html'))), 
     ); 
    } 

    public function getUserDataSpan(User $user) 
    { 
     if (!is_object($this->_securityContext->getToken()) || !is_object($this->_securityContext->getToken()->getUser())) 
      return '<span class="userdata-secret" title="|User information|User information is available only to logged in users.">[not available]</span>'; 

     return '<span class="userdata" rel="">' . $user->getDisplayName() . '</span>'; 
    } 

    public function getName() 
    { 
      return 'twig_userdataspan'; 
    } 
} 

I 해요 내가 내 rel을 작성해야합니다 방법을 알고하지 않는 붙어 조금 속성. Twig 템플릿에서 사용할 수 있습니다.

{{ path('AcmeDemoBundle_ajaxUserdata', { id: user.id }) }} 

그러나이 방법은 Twig 확장 프로그램에서는 작동하지 않습니다. 누구든지 유용한 예제에서 나를 가리킬 수 있을까요?

답변

4

당신의 나뭇 가지 확장 서비스의 router를 주입하고 방법의 일반적인 방법으로 URL을 생성, 예컨대

$this->router->generate('AcmeDemoBundle_ajaxUserdata', array(
    'id' => $user->id, 
)); 

는 services.yml에 확장에 @router 인수를 추가

services: 
    demo.twig.extension: 
     class: DemoBundle\Twig\Extension 
     arguments: [@router] 
관련 문제