5

私の Symfony2 バンドルでは、関数 (拡張機能) が定義されているかどうかを確認する必要があります。より具体的には、KnpMenuBundle がインストールされている場合は、バンドルでそれを使用します。それ以外の場合は、プラグインを自分でレンダリングします。

私はこれを試しましたが、もちろんこれはうまくいきません:

{% if knp_menu_render() is defined %}
    {# do something #}
{% else %}
    {# do something else #}
{% endif %}

関数が定義されているかどうかを確認するためのテスト/関数/フィルターはありますか? そうでない場合、KnpMenuBundle がアプリケーションにインストールされているかどうかを確認する別の方法はありますか?

4

2 に答える 2

1

同じニーズがあったので、独自の拡張機能を作成しました。

class IsLoadedExtension extends \Twig_Extension
{
    /**
     * @var \Twig_Environment
     */
    protected $environment;

    public function initRuntime(\Twig_Environment $environment)
    {
        $this->environment = $environment;
    }

    /**
     * Returns a list of functions to add to the existing list.
     *
     * @return array An array of functions
     */
    public function getTests()
    {
        return array(
                new \Twig_SimpleTest('loaded', [$this, 'hasExtension']),
        );
    }

    /**
     * @param string $name
     * @return boolean
     */
    function hasExtension($name)
    {
        return $this->environment->hasExtension($name);
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'amce_extension_exists';
    }
}

次に、Twig に登録します。

services:
    acme_somebundle.twig.is_loaded_extension:
        class: Acme\SomeBundle\Twig\IsLoadedExtension
        tags: [{ name: twig.extension }]

そして、次のように小枝テンプレートで使用しました:

{% if 'knp_menu' is loaded %}
  {# use knp menu #}
{% endif %}
于 2015-02-27T18:50:07.463 に答える