Symfony欧宝娱乐app下载地址 3.4新增功能:弃用的包继承
2017年9月28日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
即将发布的Symfony 4版本最大的变化之一是删除了用于管理应用程序代码的包。欧宝娱乐app下载地址包仍然作为第三方插件存在供应商/
,但您自己的代码将默认存在于src /
目录,它将使用普通的PHP名称空间而不是包。
在Sy欧宝娱乐app下载地址mfony 3.4中,我们进一步简化了捆绑包。这就是为什么我们弃用的包继承我们将在Symfony 4.0中删除它。欧宝娱乐app下载地址这继承机制传统上用于覆盖一些模板、控制器和第三方包的其他元素。在Sy欧宝娱乐app下载地址mfony 4.0中,您需要使用替代解决方案来覆盖这些元素:
- 控制器:定义与要覆盖的控制器路径相同的路由,并实现自己的逻辑。
- 模板:使用传统的通用模板覆盖机制
应用程序/资源/ < BundleName > /视图/ < templateName > .html.twig
Dir或new模板/包/ < BundleName > / < templateName > .html.twig
在Symfon欧宝娱乐app下载地址y 3.4及更高版本上的dir;你也可以使用树枝名称空间在与想要自定义的包相同的名称空间下定义新模板。 - 路由:不要加载bundle路由或应用与控制器相同的技术。
- 服务而且配置:使用编译器或装饰服务.
- 实体:不可能,除非bundle提供了映射的超类。
- 形式:使用形式的扩展.
- 验证:不可能,除非bundle提供验证组.
- 翻译:与bundle继承无关;只需要覆盖右边翻译领域.
发表在#生活在边缘
评论
Marko Malović
2017年9月28日在14:13)
这很有道理。
克利斯朵夫Coevoet
2017年9月28日在16:42
@nicolas你指的是哪个案子?
克利斯朵夫Coevoet
2017年9月28日16时
如果有人想知道,bundle继承系统不允许覆盖实体、验证规则、表单或转换(也不允许由DI扩展加载的服务)。所以在弃用后重写这些并不会改变。
唯一实际的更改是路由(在这里只要重新定义路由总是可能的)、模板(在这里覆盖模板而不使用子包也总是有效的)和控制器。
唯一实际的更改是路由(在这里只要重新定义路由总是可能的)、模板(在这里覆盖模板而不使用子包也总是有效的)和控制器。
米格尔·安吉尔Garzón
2017年9月28日在22:48
@christophe我猜@nicolas指的是从树枝渲染的控制器动作,在这种情况下,如果我没有错,解决方案是覆盖“父”模板,并在其中渲染我们自己的控制器动作
Arnaout Slimen
2017年9月29日说在06:53
这是否意味着我不能将我的代码(在' /src '下)分离成包?!
如果我想创建一个第三方包,将安装在' /vendor '下,我该如何做到这一点?
如果我想创建一个第三方包,将安装在' /vendor '下,我该如何做到这一点?
@Arnaout你仍然可以在你的应用程序代码中使用捆绑包,但是它不会被官方推荐,而且一些特性可能不会像预期的那样工作(与今天的情况相反,推荐捆绑包,但有些人不使用它们)。
关于第三方捆绑包,没有任何变化。你仍然可以创建这些包,它们仍然安装在vendor/事实上,对于你当前的应用程序内包,一个可能的解决方案是将它们变成私有的第三方包并安装在你的应用程序中。
关于第三方捆绑包,没有任何变化。你仍然可以创建这些包,它们仍然安装在vendor/事实上,对于你当前的应用程序内包,一个可能的解决方案是将它们变成私有的第三方包并安装在你的应用程序中。
: Bertineau
2017年9月29日说在10:04
Sym欧宝娱乐app下载地址fony 3.4是否与应用程序代码的纯PHP名称空间兼容?和…这个动作有什么指导方针吗?
@Pierre-Charles是的,当使用Symfony Fle欧宝娱乐app下载地址x的Symfony 3.3或更高版本时。有关示例,请参见https://github.欧宝娱乐app下载地址com/symfony/symfony-demo。
@Mickaël第三方捆绑包(安装在vendor/中的那些)将像以前一样工作,因为我们没有为它们改变任何东西(如果您使用Flex,除了自动注册和自动配置,但这只是一些自动化)。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now