检查是否定义了功能/扩展名

Wou*_*r J 5 symfony twig knpmenubundle

在我的Symfony2包中,我需要检查是否定义了一个函数(扩展名).更具体地说,如果安装了KnpMenuBundle,我在我的包中使用那个,否则我将自己渲染插件.

我尝试了这个,但这当然不起作用:

{% if knp_menu_render() is defined %}
    {# do something #}
{% else %}
    {# do something else #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

是否有测试/功能/过滤器来检查功能是否已定义?如果没有,是否有另一种方法来检查应用程序中是否安装了KnpMenuBundle?

Jak*_*las 3

在Twig 扩展中编写一个函数来检查捆绑包是否已启用。

已注册捆绑包的列表存储在kernel.bundles参数中。

Twig 扩展被注册为服务。这意味着您可以将任何其他服务或参数传递给您的扩展:

<services>
    <service id="acme.twig.acme_extension" class="Acme\DemoBundle\Twig\AcmeExtension">

        <argument>%kernel.bundles%</argument>

        <tag name="twig.extension" />
    </service>
</services>
Run Code Online (Sandbox Code Playgroud)

在 Twig 函数或过滤器中,您稍后可以使用已传递给扩展的服务或参数。