sis*_*sko 3 php import symfony twig
我怎么能有一个Twig文件从同一个或子目录中的第二个Twig文件中导入一些内容?
我正在开发一个项目,其中多个Twig文件有共同的内容,我试图避免在Twig文件之间复制和粘贴内容.
所以,我希望有一个包含共享标记的子目录,只需"导入"到主Twig文件的相关部分.
将import.list.html.twig放在与主Twig文件相同的目录中,我尝试了以下操作:
{% extends "::base.html.twig" %}
{% block title %}StockBundle:StockController:index{% endblock %}
{% block body %}
<h1>Welcome to the StockController:List page</h1>
{% for stock in stocks %}
<div class='list'>
<div class='each stock'>
<span class='name'>{{ stock.name }}</span>
<span class='desc'>{{ stock.description }}</span>
<span class='balc'>{{ stock.balance }}</span>
<span class='edit'>
<a href="{{ path('stock_edit', {'id':stock.id}) }}">edit</a>
</span>
</div>
</div>
{% endfor %}
{% include 'import.list.html.twig' %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
...但我收到以下错误:
Unable to find template "import.list.html.twig" in ::base.html.twig at line 10.
Run Code Online (Sandbox Code Playgroud)
当你include需要知道它所在的命名空间时.当你这样做::时{% extends "::base.html.twig" %},它来自app/Resources/views你的应用程序目录.
请参阅:模板命名和位置Symfony文档
如果你import.list.html.twig是一个捆绑包,你必须正确定义.例如,如果您拥有StockBundle并且该捆绑包中的Resources/views目录具有自己的base.html.twig模板,那么您将拥有
{% include 'StockBundle::base.html.twig' %}
Run Code Online (Sandbox Code Playgroud)
如果你有一个Stock包里面的Stock文件夹(附在你的StockController上)和一个import.list.html.twig模板,你就可以
{% include 'StockBundle:Stock:import.list.html.twig' %}
Run Code Online (Sandbox Code Playgroud)
请注意,通过Registered Namespaced Twig Paths,您也可以使用命名空间路径.它们实际上也更快.所以上面反而是
{% include '@Stock/base.html.twig' %}
{% include '@Stock/Stock/import.list.html.twig' %}
Run Code Online (Sandbox Code Playgroud)
这是Symfony模板最佳实践的另一个很好的参考
从Symfony 2.2开始,您可以使用该include() 函数,这是包含模板的首选方法:
{{ include('@Stock/base.html.twig') }}
{{ include('@Stock/Stock/import.list.html.twig') }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |