我有一个问题,如何分离指定模板twig文件的加载指定javascript文件。
我得到了例如admin.html.twig,它扩展了base.html.twig,在我得到的基础上
{% block javascripts %}
<script src="/assets/js/core/jquery.min.js"></script>
<script src="/assets/js/core/popper.min.js"></script>
<script src="/assets/js/core/bootstrap-material-design.min.js"></script>
<script src="/assets/js/plugins/perfect-scrollbar.jquery.min.js"></script>
<script async defer src="https://buttons.github.io/buttons.j"></script>
<script src="/assets/js/plugins/chartist.min.js"></script>
<script src="/assets/js/plugins/bootstrap-notify.js"></script>
<script src="/assets/js/material-dashboard.min.js"></script>
<script src="/assets/demo/jquery.sharrre.js"></script>
<script src="/assets/js/sparkline.js"></script>
<script src="/assets/js/plugins/chartjs.min.js"></script>
{% endblock %}
我得到了像dashboard.html.twig这样的下一个文件,它扩展了一个admin.html.twig文件,我的问题是在dashboard.html.twig文件中我得到了一个小写的自己的小javascript代码,这个javascript的当然使用一个jquery库,但这个库我在base.html.twig文件中加载了我的另一个自编脚本,它位于dashboard.html.twig中。
我的问题是,我怎么能加载我的小代码javascript(当然我可以将它保存在像mycode.js这样的分隔文件中)但是如何只在我使用的dashboard.html.twig文件的路径和jquery之后加载加载?因为在另一个路由器我dont need this mycode.js so I don
t想把它放到javascript块中的base.html.twig文件,任何想法?
你可以潜水
{% extends "admin.html.twig" %} {# use only in case your all templates are at the same places like app/Resources/views/admin.html.twig #}
{% block javascripts %}
{{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
<script src="/assets/js/dashboard/code.js"></script>
{% endblock %}
如果您尝试从另一个包中扩展模板,则可以使用此方法
{% extends "YourBundleName:Default:admin.html.twig" %} {# YourControllerRelativeName just in case your view structure is like views/Default/admin.html.twig#}
{% block javascripts %}
{{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
<script src="/assets/js/dashboard/code.js"></script>
{% endblock %}
为了更好地理解你应该在这里阅读一下:https://symfony.com/doc/2.8/templating.html注意: - 在文档中你应该根据你当前的版本更改版本。
如果dashboard
直接扩展admin
,那么你可以执行以下操作以确保加载所有管理脚本并添加dashboard
特定脚本:
{% extends "admin.html.twig" %}
{% block javascripts %}
{{ parent() }} {# execute the parent block, thus loading all scripts in admin #}
<script src="/assets/js/dashboard/mycode.js"></script>
{% endblock %}
我建议以下解决方案。
base.html.twig
之后在{% block javascripts %}{% endblock %}
中声明以下块
{% block javascript_page %}{# specific code for current page #}{% endblock %}
{% extends "admin.html.twig" %}
或{% extends "base.html.twig" %}
{% block javascript_page %}
<script src="/assets/js/pages/my_page.js"></script>
{% endblock %}
尽管DarkBee的回答也是正确的,但是这样你就不用担心在每一页中调用{{ parent() }}
了。