的资产()
函数的主要目的是让应用程序更便携。如果您的应用程序的生活在您的主机(如的根源。https://example.com
),那么应该呈现的路径/图片/ logo.png
。但是如果您的应用程序(如住在子目录中。https://example.com/my_app
),每个资产路径应该呈现的子目录(例如/ my_app /图片/ logo.png
)。的资产()
函数负责这个通过确定您的应用程序是如何被使用和生成相应的正确路径。
提示
的资产()
函数支持各种缓存通过破坏技术<一个href=”//www.oldmanjams.com/doc/current/templating/reference/configuration/framework.html" class="reference internal">版本>,<一个href=”//www.oldmanjams.com/doc/current/templating/reference/configuration/framework.html" class="reference internal">version_format>,<一个href=”//www.oldmanjams.com/doc/current/templating/reference/configuration/framework.html" class="reference internal">json_manifest_path>配置选项。
如果你需要绝对url的资产,使用absolute_url ()
树枝函数如下:
的应用程序
变量(的一个实例<一个href=”https://github.com/symfony/symfony/blob/6.3/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/current/templating/security.html" class="reference internal">当前用户对象>或
零
如果用户未被认证。
-
app.request
-
的<一个href=”https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/HttpFoundation/Request.php" class="reference external" title="请求”rel=”external noopener noreferrer" target="_blank">请求>对象存储当前<一个href=”//www.oldmanjams.com/doc/current/templating/components/http_foundation.html" class="reference internal">请求数据>(取决于您的应用程序,这可能是一个<一个href=”//www.oldmanjams.com/doc/current/templating/components/http_kernel.html" class="reference internal">sub-request>或常规请求)。
-
app.session
-
的<一个href=”https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/HttpFoundation/Session/Session.php" class="reference external" title="会话”rel=”external noopener noreferrer" target="_blank">会话>表示当前对象<一个href=”//www.oldmanjams.com/doc/current/templating/session.html" class="reference internal">用户的会话>或
零
如果没有。
-
app.flashes
-
所有的数组<一个href=”//www.oldmanjams.com/doc/current/templating/session.html" class="reference internal">flash的消息>存储在会话中。你也可以只有某种类型的消息(如。
app.flashes(“通知”)
)。
-
app.environment
-
当前的名称<一个href=”//www.oldmanjams.com/doc/current/templating/configuration.html" class="reference internal">配置环境>(
dev
,刺激
等等)。
-
app.debug
-
如果在<一个href=”//www.oldmanjams.com/doc/current/templating/configuration/front_controllers_and_kernel.html" class="reference internal">调试模式>。否则错误。
-
app.token
-
一个<一个href=”https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/Security/Core/Authentication/Token/TokenInterface.php" class="reference external" title="TokenInterface”rel=”external noopener noreferrer" target="_blank">TokenInterface>对象表示安全令牌。
-
app.current_route
-
路线的名称与当前请求或有关
零
如果没有请求(相当于可用app.request.attributes.get (“_route”)
)
-
app.current_route_parameters
-
数组的参数传递给当前请求的路径或一个空数组如果没有请求(相当于可用
app.request.attributes.get (“_route_params”)
)
-
app.locale
-
在当前使用的语言环境<一个href=”//www.oldmanjams.com/doc/current/templating/translation.html" class="reference internal">语言切换器>上下文。
6.2
的app.current_route
和app.current_route_parameters
Symfony 6.2中引入的变量。欧宝娱乐app下载地址
6.3
的app.locale
变量是在Symfony 6.3中引入的。欧宝娱乐app下载地址
除了全球性的应用程序
变量注入Symfony,您也可以将变量自动欧宝娱乐app下载地址所有树枝模板,在下一节中解释。
除了静态值,树枝从全局变量也可以参考服务<一个href=”//www.oldmanjams.com/doc/current/templating/service_container.html" class="reference internal">服务容器>。主要缺点是这些服务并不延迟加载。换句话说,当树枝被加载,您的服务被实例化,即使你不使用全局变量。
作为全球树枝变量,定义一个服务服务ID字符串的前缀@
性格,这是通常的语法<一个href=”//www.oldmanjams.com/doc/current/templating/service_container.html" class="reference internal">指服务容器参数>:
现在你可以使用uuid
在任何树枝模板来访问变量UuidGenerator
服务:
如果你的控制器不延长AbstractController
,你需要<一个href=”//www.oldmanjams.com/doc/current/templating/controller.html" class="reference internal">在你的控制器获取服务>并使用呈现()
的方法嫩枝
服务。
另一个选择是使用#(模板())
属性上的控制器方法定义的模板来呈现:
6.2
的#(模板())
属性是在Symfony 6.2中引入的。欧宝娱乐app下载地址
然后,通过树枝模板的路径存在()
加载程序的方法:
在运行里面的短绒<一个href=”https://docs.github.com/en/free-pro-team@latest/actions" class="reference external" rel="external noopener noreferrer" target="_blank">GitHub的行为>,输出是自动适应GitHub所需的格式,但是你可以力,格式:
然后,使用{%转储%}
标签或{{转储()}}
函数根据您的需要:
6.3
使用命名参数的选项dump ()
是在Symfony 6.3中引入的。欧宝娱乐app下载地址
为了避免泄漏敏感信息,dump ()
功能/标签仅仅是可用的dev
和测试
配置环境>。如果你想使用它刺激
PHP环境中,您将看到一个错误。
的包括()
树枝函数作为参数包括模板的路径。包括模板访问模板,包括它的所有变量(使用<一个href=”https://twig.www.oldmanjams.com/doc/3.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/current/templating/http_cache/esi.html" class="reference internal">模板缓存片段>。
请注意
当使用控制器()
功能,您还必须配置<一个href=”//www.oldmanjams.com/doc/current/templating/templates.html" class="reference internal">片段的路径选择>。
当JavaScript被禁用或负载需要很长一段时间你可以显示一个默认的内容呈现一些模板:
您可以定义默认模板/呈现()
函数(这将覆盖任何全局定义的默认模板):
或者你也可以指定一个字符串显示为默认内容:
使用属性
选项来定义hinclude的价值。js选项:
的<一个href=”https://twig.www.oldmanjams.com/doc/3.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/3.x/tags/extends.html" class="reference external">树枝模板继承>文档以了解更多关于如何重用父块内容覆盖模板和其他高级功能。
如果你是呈现一个变量,是可信的,包含HTML内容,使用<一个href=”https://twig.www.oldmanjams.com/doc/3.x/filters/raw.html" class="reference external">树枝生过滤器>禁用输出逃离这个变量:
读了<一个href=”https://twig.www.oldmanjams.com/doc/3.x/api.html" class="reference external">树枝输出逃离文档>了解更多关于如何禁用输出逃离一块甚至整个模板。
如果你想创建一个函数,而不是一个过滤器,定义getFunctions ()
方法:
提示
自定义过滤器和功能,你也可以注册<一个href=”https://twig.www.oldmanjams.com/doc/3.x/advanced.html" class="reference external">全局变量>。
然后,创建新的AppRuntime
类(它不是必需的,但是这些类后缀为运行时
按照惯例),包括以前的逻辑formatPrice ()
方法:
如果您使用的是默认值services.yaml
配置,这将已经工作!否则,<一个href=”//www.oldmanjams.com/doc/current/templating/service_container.html" class="reference internal">创建一个服务>这个类和<一个href=”//www.oldmanjams.com/doc/current/templating/service_container/tags.html" class="reference internal">标记你的服务>与twig.runtime
。
这项工作,包括代码示例,许可下<一个rel=”李cense" href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons冲锋队3.0>许可证。
一个rticle>
< /div>