1

プロジェクト用の Twig 拡張機能を作成しようとしています。目標は、jquery.cluetip プラグインを使用してユーザー ポップアップを生成することです。これにより、AJAX クエリの結果を素敵なツールチップに表示できます。生成された HTML コードは次のようになります。

<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';
    }
}

属性をどのように入力すればよいかわからないため、少し行き詰まっていrelます。私が使用するTwigテンプレートで

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

しかし、これは Twig 拡張機能では機能しません。誰かが使用可能な例を教えてくれますか?

4

1 に答える 1

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]
于 2012-07-31T23:07:28.357 に答える