新在Symfo欧宝娱乐app下载地址ny 3.4:改进的覆盖模板
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
在Sy欧宝娱乐app下载地址mfony 3.4我们弃用包继承在Symfon欧宝娱乐app下载地址y 4.0我们不再推荐使用包自己的代码,但覆盖模板从第三方包仍然是一个共同的需要。这就是为什么在Symfony欧宝娱乐app下载地址 3.4我们已经提高了模板的覆盖在准备Symfony 4。
新的覆盖目录
在Sy欧宝娱乐app下载地址mfony 2和3的应用程序中,第三方包模板覆盖的应用程序/资源/ < BundleName > /视图/
目录中。在Sy欧宝娱乐app下载地址mfony 4这个目录会被搬到src /
看起来不高兴,现在我们有一个存储模板模板/
在项目的根目录。
因此,在Symfony 3.欧宝娱乐app下载地址4我们已经创建了一个新目录覆盖包模板:模板/包/ < BundleName > /
。例如,如果你想自定义错误页面在Symf欧宝娱乐app下载地址ony应用程序:
1 2 3 4 5 6 7
{# 欧宝娱乐app下载地址Symfony 3.3 #}{# app /资源/ / error404.html TwigBundle /视图/异常。树枝#}网页未找到!{# 欧宝娱乐app下载地址Symfony 3.4 #}{# / error404.html模板/包/ TwigBundle /异常。树枝#}网页未找到!
覆盖和扩展模板
有时你想覆盖第三方包模板但重用的大部分内容,避免代码重复。假设你想覆盖和扩展layout.html.twig
从FOSUserBundle模板:
1 2 3
{#模板/包/ FOSUserBundle / layout.html。树枝#}{%扩展' @FOSUser / layout.html。嫩枝' %}{#……这并不工作……#}
如果你尝试这个例子中,您将看到“达到嵌套的水平”错误,因为同时覆盖和扩展类似于一个无限循环。在Sy欧宝娱乐app下载地址mfony 3.4中我们解决了这个问题创建一个新的和排他的树枝为每个包名称空间。
新的名称空间是一样的,但添加!
在包的名字。在这种情况下,@FOSUser
指正常的树枝名称空间包括第三方模板和自己的模板和覆盖@ FOSUser !
仅指第三方包定义的模板(无论是否已经覆盖,你总是得到原始模板)。
使用这个新的名称空间,很容易解决前面的问题:
1 2 3
{#模板/包/ FOSUserBundle / layout.html。树枝#}{%扩展“@ ! FOSUser / layout.html。嫩枝' %}{#……这是预期…#}
更好的调试:树枝
命令
最后,为了使这些变化更容易调试调试:树枝
现在命令显示树枝名称空间的完整列表和它们相关的文件路径在Symfony所使用的相同的优先顺序。欧宝娱乐app下载地址
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
Alex Rock is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now这些特性将允许很多包在一个更好的方法重写的!定义标准块从未变得如此简单:)