我会为了啥做一个捆绑包? (Symfony 2)

Posted

技术标签:

【中文标题】我会为了啥做一个捆绑包? (Symfony 2)【英文标题】:For what would I make a bundle? (Symfony 2)我会为了什么做一个捆绑包? (Symfony 2) 【发布时间】:2012-08-09 17:39:54 【问题描述】:

好吧,我准备用 symfony 2 做一个网站。

我应该只制作一个“主要”捆绑包来控制/组合所有其他捆绑包吗? 对于我正在考虑的其他捆绑包,可以说是控制与照片相关的事物的“画廊”捆绑包,以及控制商店部分的“商店”捆绑包。

什么是最好的(或至少是好的)实践?专业团队将如何做到这一点?

【问题讨论】:

【参考方案1】:

就像@Cyprian 所说的那样,捆绑包是一组可以单独工作的功能。正如开发过程中发生的那样,我们并不总是知道什么时候是分开的。它随着时间而来。

就个人而言,我从 2 月开始使用 Symfony2,我从未停止阅读手册和相关书籍以更深入地了解。我向你保证,这很有帮助,而且读起来很有趣:)

这是我的top favourites documentation pages, en enlightening blog posts on delicious。

对于您的直接问题,请忘记我们在 symfony 1.x 中所做的“前端”和“后端”。只需考虑模型实体(如在单行中)并构建在一个捆绑包中。随着代码的增长,您将看到如何在包中反汇编和分离。您只需要记住将您的功能分离为小方法并进行重构。

【讨论】:

【参考方案2】:

查看以下问题以及我对它们的回答:

Should everything really be a bundle in Symfony 2? Symfony2 conceptual issue: general bundles vs. specific ones

基本上,在我的上一个项目中,我没有为 app 特定 代码使用捆绑包;唯一的例外是那些硬编码成捆绑包的东西——比如 Doctrine Fixtures——我放在AppBundle 中。其他一切——模型、控制器、服务、表单类型等——都不在任何捆绑包中。

【讨论】:

感谢您的回答,我现在是 symfony2 的新手,所以现在对基本设置进行大量更改可能不是明智之举。但我会看看这种方法。 嘿 Elnur,我已经阅读了您的其他一些主题,但我不明白您如何将控制器、表单等内容放在任何 Bundle 之外。这究竟是如何工作的?那么捆绑包实际上为您服务的目的是什么? 我计划通过在捆绑包之外定义控制器、表单等示例来扩展我在此处给出的列表中的第一个问题的答案。只是需要一些时间。 在my answer 中添加了关于使用捆绑包中的控制器的部分。【参考方案3】:

根据 symfony 文档,bundle 应该是一致且封闭的结构。因此,如果例如“商店”和“画廊”以某种方式相关(例如,使用相同的模型),那么它们应该在一个包中(AppBundle、CoreBundle、PlatformBundle - 任何你想要的)。但是如果画廊是完全独立的一段代码并且可以很容易地加入到另一个项目中——那么你应该考虑将它排除在单独的包中。

我认为一个好主意是看看 github 上的一些项目,看看其他人是如何处理的。

【讨论】:

我实际上不知道 github 是如何工作的,也不知道如何找到一个与我想在相当长的时间内完成的项目相匹配的项目。但是你说的是:制作 1 个包含基本网站的包(appBundle 或 coreBundle),然后对于可用于其他项目(画廊和商店)的特殊部分有自己的包? 是的 - 完全正确。这种方法有几个优点。例如 1) 效率稍高 2) 您可以在第一眼看到在其他地方可以使用的东西。 3)IMO 以这种方式更容易管理您的测试 4)您的应用程序更“便携”。除了应用程序的独立部分之外,您可以考虑为实用程序创建单独的包(例如,假设某些数学类或类定义了 http 状态等)或在逻辑上与应用程序非常不同的部分(例如 AdminBundle)。通常经过大量探索后,我发现这是最方便和流行的解决方案。

以上是关于我会为了啥做一个捆绑包? (Symfony 2)的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2.x 中的所有东西都应该是一个捆绑包吗?

Symfony 无法注册捆绑包

Symfony 4 捆绑包工作

添加新捆绑包时出现Symfony3错误

Symfony - 如何覆盖不在捆绑包中的供应商组件

Symfony 4 - 来自自定义捆绑包的服务不起作用