Twig:{%block%}并扩展

时间:2016-08-17 16:42:31

标签: symfony twig

我试图覆盖文件(index.html.twig)中的{%block%},该文件扩展了使用该块的文件(base.html.twig)。但是扩展文件包含另一个twig文件(feature.twig),其中放置了覆盖index.html.twig中内容的块。 这有可能吗?也许还有其他东西而不是include语句?

if (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,Manifest.permission.READ_PHONE_STATE)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_PHONE_STATE},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

3 个答案:

答案 0 :(得分:3)

include - 函数(或代码)只能嵌入 呈现的结果。无法操纵包含文件中的块。

但在你的情况下,这不是必要的。由于index.html.twig扩展了base.html.twig,您可以像这样覆盖块extraJs

{# index.html.twig #}
{% extends 'base.html.twig' %}

{% block extraJs %}
    {{ include('feature.html.twig') }}
{% endblock }

如果需要,您可以使用parent - 函数扩展原始块。 E.g:

{# index.html.twig #}
{% extends 'base.html.twig' %}

{% block extraJs %}
    {{ parent() }} {# `extraJs`-block content from `base.html.twig` #}
    {{ include('feature.html.twig') }}
{% endblock }

答案 1 :(得分:0)

不,不可能。 include只是渲染模板并包含输出。您无法使用它来覆盖阻止。以下是与此问题相关的问题https://github.com/twigphp/Twig/issues/1360

答案 2 :(得分:0)

仅作为一种信息,我认为您不能在{%扩展'base.html.twig'%}之前添加注释{#index.html.twig#},并且我认为必须始终将注释放置成块,希望这有帮助