Plugins 通过“动态水平重用”创建细枝插件;使用「;(不包括在内) 需要:从数据库加载的动态模板
我需要通过“模板插件”提供一个JSON对象,该插件将来自一个数据库(在应用程序本身之外定义)。只有存在插件时,才会应用该插件 在本例中,假设我有一个“Reservation”类型的对象,其中包含一个“Flight”类型的子对象: 规则Plugins 通过“动态水平重用”创建细枝插件;使用「;(不包括在内) 需要:从数据库加载的动态模板,plugins,twig,user-defined-functions,dynamic-content,twig-extension,Plugins,Twig,User Defined Functions,Dynamic Content,Twig Extension,我需要通过“模板插件”提供一个JSON对象,该插件将来自一个数据库(在应用程序本身之外定义)。只有存在插件时,才会应用该插件 在本例中,假设我有一个“Reservation”类型的对象,其中包含一个“Flight”类型的子对象: 规则 控制器将调用传递多个对象的页面模板 页面模板将“使用”或“包括”(参见后面的更多信息)一个object.html.twig,并将显示它 object.html.twig将执行以下操作: 如果没有任何已知的插件能够处理这种类型的对象,模板将显示一个,并将对象转换
- 控制器将调用传递多个对象的页面模板
- 页面模板将“使用”或“包括”(参见后面的更多信息)一个
,并将显示它object.html.twig
将执行以下操作:object.html.twig
- 如果没有任何已知的插件能够处理这种类型的对象,模板将显示一个
,并将对象转换为YAML。这将主要作为一个“默认”插件或“回退”插件 - 如果有一个已知的插件能够处理该对象,那么该对象将被发送到该插件(除了另一个细枝模板之外,它不是别的)。
- 在这种情况下,插件应该能够分离“可解释”结果的“部分”,使其“良好”,并将其余部分保留在一个对象中,该对象将与原始的“默认”插件一起再次显示
- 如果对象的某些部分依次是可解释的,那么它们将依次传递给其他插件
- 如果没有任何已知的插件能够处理这种类型的对象,模板将显示一个
include
和use
之间的主要区别在于:
- 当您
一个模板时,它是直接的HTML“插入到那里”,在那里您可以使用包含
操作符进行打印,{{}
进行控制流(设置变量、ifs、fors等)。渲染器将直接对其进行处理。但是禁止通过{%}
定义新块{%block myNiceBlock%}
- 当您“使用”模板时,它是预加载的,并且允许使用块。没有包含块的渲染。然后,从调用者处,使用{{block('whatever')}}命令渲染器转到并渲染该特定块
use
允许水平重用,并允许自身与父块调用的其他子块一起自动组织,所有子块都在一个文件中
例如,在airports示例中,如果有N个图像,则在include
中,您应该将包装器HTML直接放在文件中,执行一个循环,然后在循环中写入内部HTML
相反,在使用
方法中,您将执行一个airport
块,该块依次在图像上循环,并仅调用在同一文件的另一个块中定义的块airportImage
,从而促进干净的编码
要求
预订
呈现时,“询问航班插件是否可用”。如果没有,则全部提交给YAML。如果是,那么如何动态地告诉预订使用航班
简而言之:如何强制模板动态地使用
(而不是包含
)来自数据库(而不是固定文件)的模板
注意:如果此信息有用:我正在将Symfony 5与webpack一起使用
谢谢 使用
是什么意思?创建新插件时不应重新部署应用程序
?从您的文本来看,插件由一个小树枝模板组成。当添加新的细枝模板时,或者您正在尝试将细枝模板存储在数据库中时,您如何不重新部署应用程序?正确(回答多个注释):同样,我们不会在代理“创建新保留”时部署应用程序,有一个创建它的POST页面和一个查看它的GET页面,我的问题的全部要点是,如果他们对对象的显示方式不满意,他们可以在表单的textarea中发布一个新的“twig语法文本”,并给它某种名称,然后将对象发送给渲染器,在数据上执行“选择”,在可用插件上执行另一个“选择”。“页面”和“主对象渲染器”它们实际上在应用程序中(因为它们不会更改)。问题是:如果它是关于“内联”内容的,我可以创建一个TwigExtension,并在任何给定的点上执行类似的操作:{{my_plugin_engine(var_with_plugin_name,var_with_plugin_data)}}
,但这更像是include
的事情。我想做一些更像{%myu插件的事情
{
"id": "ABC-XYZ",
"reservationDate": "2020-09-23",
"state": "paid",
"flight":
{
"origin": "BCN",
"destination": "MAD",
"airline": "VY"
}
}