感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
通常,当你引用一个模板,你将要使用MyBundle:Subdir:filename.html.twig
格式(请看:模板的命名和存储位置)。
Twig本身也提供了一个功能叫做“名称空间路径(namespaced paths)”,并自动为所有的bundle内置:
下面的路径便是一个例子:
1 2 | {% extends "AppBundle::layout.html.twig" %}
{{ include('AppBundle:Foo:bar.html.twig') }} |
使用命名空间路径,下面的工作是一样的:
1 2 | {% extends "@App/layout.html.twig" %}
{{ include('@App/Foo/bar.html.twig') }} |
两个路径都是有效的,并且这个功能在symfony中是默认的。
额外补充一点。使用经过命名空间声明的语法会运行得更快一些。
您也可以注册自己的自定义名称空间。假设你正在使用一些第三方库,他们包含存放在vendor/acme/foo-bar/templates
的Twig模板。首先,为这个路径注册一个命名空间:
1 2 3 4 5 | # app/config/config.yml
twig:
# ...
paths:
"%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar |
1 2 3 4 5 6 7 8 9 10 11 | <!-- app/config/config.xml -->
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:twig="http://symfony.com/schema/dic/twig"
>
<twig:config debug="%kernel.debug%" strict-variables="%kernel.debug%">
<twig:path namespace="foo_bar">%kernel.root_dir%/../vendor/acme/foo-bar/templates</twig:path>
</twig:config>
</container> |
这个注册的命名空间被称为foo_bar
,引用 vendor/acme/foo-bar/templates
目录。假设有一个名为sidebar.twig
的文件在该目录,你就可以轻松地使用它:
1 | {{ include('@foo_bar/sidebar.twig') }} |
你也可以分配几个路径到相同的模板命名空间上。路径配置的顺序是非常重要的,因为Twig总是从第一个配置的路径开始,以此来推加载存在的第一个模板。当特定的模板不存在时,此功能可以作为一种回退机制来加载通用模板。
1 2 3 4 5 6 7 | # app/config/config.yml
twig:
# ...
paths:
"%kernel.root_dir%/../vendor/acme/themes/theme1": theme
"%kernel.root_dir%/../vendor/acme/themes/theme2": theme
"%kernel.root_dir%/../vendor/acme/themes/common": theme |
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- app/config/config.xml -->
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:twig="http://symfony.com/schema/dic/twig"
>
<twig:config debug="%kernel.debug%" strict-variables="%kernel.debug%">
<twig:path namespace="theme">%kernel.root_dir%/../vendor/acme/themes/theme1</twig:path>
<twig:path namespace="theme">%kernel.root_dir%/../vendor/acme/themes/theme2</twig:path>
<twig:path namespace="theme">%kernel.root_dir%/../vendor/acme/themes/common</twig:path>
</twig:config>
</container> |
现在,你可以使用相同的 @theme
命名空间来引用前三个目录中的任何模板:
1 | {{ include('@theme/header.twig') }} |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。