的路径()
函数生成相对url。如果需要生成绝对url(例如在呈现电子邮件或RSS提要的模板时),请使用url ()
函数,其参数与路径()
(如。…< / >
).
您现在可以使用资产()
功能:
的资产()
函数的主要目的是使应用程序更具可移植性。如果您的应用程序位于主机的根目录下(例如:https://example.com
),则呈现的路径应为/图片/ logo.png
.但是如果您的应用程序位于子目录(例如。https://example.com/my_app
),每个资产路径都应该呈现子目录(例如:/ my_app /图片/ logo.png
).的资产()
Function通过确定如何使用应用程序并相应地生成正确的路径来处理这一问题。
提示
的资产()
函数支持各种缓存破坏技术<一个href="//www.oldmanjams.com/doc/5.2/reference/configuration/framework.html" class="reference internal">版本>,<一个href="//www.oldmanjams.com/doc/5.2/reference/configuration/framework.html" class="reference internal">version_format>,<一个href="//www.oldmanjams.com/doc/5.2/reference/configuration/framework.html" class="reference internal">json_manifest_path>配置选项。
提示
如果你想以一种现代的方式帮助打包、版本化和缩小你的JavaScript和CSS资产,请阅读本文<一个href="//www.oldmanjams.com/doc/5.2/frontend.html" class="reference internal">欧宝娱乐app下载地址Symfony的Webpack Encore>.
如果需要资产的绝对url,请使用absolute_url ()
树枝功能如下:
的应用程序
变量的实例<一个href="https://github.com/symfony/symfony/blob/5.2/src/Symfony/Bridge/Twig/AppVariable.php" class="reference external" title="AppVariable"rel="external noopener noreferrer" target="_blank">AppVariable>)让你可以访问这些变量:
-
app.user
-
的<一个href="//www.oldmanjams.com/doc/5.2/security.html" class="reference internal">当前用户对象>或
零
如果用户没有通过认证。
-
app.request
-
的<一个href="https://github.com/symfony/symfony/blob/5.2/src/Symfony/Component/HttpFoundation/Request.php" class="reference external" title="请求"rel="external noopener noreferrer" target="_blank">请求>对象,该对象存储当前<一个href="//www.oldmanjams.com/doc/5.2/components/http_foundation.html" class="reference internal">请求数据>(根据您的应用程序,这可能是一个<一个href="//www.oldmanjams.com/doc/5.2/components/http_kernel.html" class="reference internal">sub-request>或者一个常规的请求)。
-
app.session
-
的<一个href="https://github.com/symfony/symfony/blob/5.2/src/Symfony/Component/HttpFoundation/Session/Session.php" class="reference external" title="会话"rel="external noopener noreferrer" target="_blank">会话>对象,它表示当前<一个href="//www.oldmanjams.com/doc/5.2/session.html" class="reference internal">用户的会话>或
零
如果没有的话。
-
app.flashes
-
的数组<一个href="//www.oldmanjams.com/doc/5.2/controller.html" class="reference internal">flash的消息>存储在会话中。您也可以只获得某些类型的消息(例如。
app.flashes(“通知”)
).
-
app.environment
-
当前的名称<一个href="//www.oldmanjams.com/doc/5.2/configuration.html" class="reference internal">配置环境>(
dev
,刺激
等等)。
-
app.debug
-
如果在,为True<一个href="//www.oldmanjams.com/doc/5.2/configuration/front_controllers_and_kernel.html" class="reference internal">调试模式>.否则错误。
-
app.token
-
一个<一个href="https://github.com/symfony/symfony/blob/5.2/src/Symfony/Component/Security/Core/Authentication/Token/TokenInterface.php" class="reference external" title="TokenInterface"rel="external noopener noreferrer" target="_blank">TokenInterface>表示安全令牌的对象。
除了全局应用程序
变量注入Symfony,您也可以欧宝娱乐app下载地址<一个href="//www.oldmanjams.com/doc/5.2/templating/global_variables.html" class="reference internal">自动向所有Twig模板注入变量>.
如果您的控制器没有从AbstractController
,你需要<一个href="//www.oldmanjams.com/doc/5.2/controller.html" class="reference internal">在控制器中获取服务>并使用呈现()
方法嫩枝
服务。
然后,将Twig模板的路径传递给存在()
加载器方法:
然后,使用{% dump %}
标签或{{dump()}}
功能取决于您的需要:
为避免敏感资料外泄dump ()
函数/标记仅在dev
而且测验
配置环境>.如果你想用它刺激
环境中,您将看到一个PHP错误。
的包括()
Twig函数以要包含的模板的路径作为参数。包含的模板可以访问包含它的模板的所有变量(使用<一个href="https://twig.www.oldmanjams.com/doc/2.x/functions/include.html" class="reference external">with_context>选项来控制这个)。
您还可以将变量传递给包含的模板。这对于重命名变量很有用。假设您的模板将用户信息存储在名为blog_post.author
而不是用户
模板片段所期望的变量。使用以下方法重命名变量:
然后,创建博客/ _recent_articles.html.twig
模板片段(_
模板名中的前缀是可选的,但它是一种约定,用于更好地区分完整模板和模板片段):
现在你可以从任何模板中调用这个控制器来嵌入它的结果:
当使用控制器()
函数,控制器不是使用常规的Symfony路由访问,而是通过专门用于服务这些模板片段的特殊URL访问。欧宝娱乐app下载地址中的特殊URL配置片段
选择:
谨慎
嵌入控制器需要向这些控制器发出请求,并因此呈现一些模板。如果您嵌入了大量的控制器,这可能会对应用程序的性能产生重大影响。如果可能的话,<一个href="//www.oldmanjams.com/doc/5.2/http_cache/esi.html" class="reference internal">缓存模板片段>.
另请参阅
模板也可以<一个href="//www.oldmanjams.com/doc/5.2/templating/hinclude.html" class="reference internal">异步嵌入内容>与hinclude.js
JavaScript库。
的<一个href="https://twig.www.oldmanjams.com/doc/2.x/tags/block.html" class="reference external">树枝块标签>定义可以在子模板中重写的页部分。它们可以是空的,就像内容
块或定义默认内容,如标题
块,当子模板未覆盖时将显示该块。
的博客/ layout.html.twig
模板可以是这样的:
模板从base.html.twig
的内容内容
块。其余的父模板块将显示它们的默认内容。但是,它们可以被第三级继承模板覆盖,例如博客/ index.html.twig
,显示博客索引:
该模板从第二级模板(博客/ layout.html.twig
)但是会覆盖不同父模板的块:page_contents
从博客/ layout.html.twig
而且标题
从base.html.twig
.
当你渲染博客/ index.html.twig
Symfony使用三欧宝娱乐app下载地址个不同的模板来创建最终的内容。这种继承机制提高了您的工作效率,因为每个模板只包含其唯一的内容,而将重复的内容和HTML结构留给一些父模板。
谨慎
当使用扩展
,子模板禁止在块之外定义模板部件。下面的代码抛出SyntaxError
:
读了<一个href="https://twig.www.oldmanjams.com/doc/2.x/tags/extends.html" class="reference external">树枝模板继承>文档,了解更多关于在覆盖模板和其他高级功能时如何重用父块内容。
如果要呈现一个受信任且包含HTML内容的变量,请使用<一个href="https://twig.www.oldmanjams.com/doc/2.x/filters/raw.html" class="reference external">树枝原始过滤器>禁用该变量的输出转义:
读了<一个href="https://twig.www.oldmanjams.com/doc/2.x/api.html" class="reference external">树枝输出转义文档>了解有关如何禁用块甚至整个模板的输出转义的详细信息。
此工作,包括代码示例,是根据<一个rel="李cense" href="https://creativecommons.org/licenses/by-sa/3.0/">创作共用BY-SA 3.0>许可证。
一个rticle>