我知道类似的问题,人们倾向于讨论Symfony 2的捆绑包的一般概念。

问题是,在一个特定的应用程序中,比如,一个类似twitter的应用程序,所有东西都应该像官方文档所说的那样,放在一个通用的包中吗?

我问这个问题的原因是,当我们开发应用程序时,一般情况下,我们不希望将我们的代码高度耦合到一些全栈胶水框架上。

如果我开发了一个基于Symfony 2的应用程序,在某个时候,我认为Symfony 2并不是继续开发的最佳选择,这对我来说会是一个问题吗?

所以一般的问题是:为什么所有东西捆绑在一起都是好事?

编辑# 1

从我提出这个问题到现在差不多一年了,我写了一篇文章来分享我在这个话题上的知识。


当前回答

通常的symfony发行版可以在没有任何额外(应用程序)包的情况下工作,这取决于您想从完整的堆栈框架中使用多少功能。

例如,你的控制器可以是任何可调用的,可以放在你的项目结构的任何地方,只要他们被自动加载。

在路由定义文件中,你可以使用:

test:
    pattern:   /test
    defaults:  { _controller: Controller\Test::test }

它可以是任何普通的php对象,只是通过它必须返回一个Symfony\Component\HttpFoundation\Response对象而与框架绑定。

你的树枝模板(或其他)可以像app/Resources/views/template.html。可以使用::template.html进行渲染。树枝逻辑名。

所有DI服务都可以在app/config/config中定义。Yml(或从app/config/services导入。例如Yml,所有服务类也可以是任何普通的旧PHP对象。完全不依赖于框架。

所有这些都是由symfony全堆栈框架默认提供的。

当您想要使用翻译文件(如xliff)时就会遇到问题,因为它们只能通过包来发现。

symfony-light发行版旨在通过发现通常只能通过捆绑包才能发现的所有内容来解决这类问题。

其他回答

当然,您可以对应用程序进行解耦。只需将其开发为一个库,并将其集成到symfony vendor/-folder(通过使用deps或composer)。json,取决于你是使用Symfony2.0还是Symfony2.1)。但是,您至少需要一个捆绑包,作为您的库的“前端”,Symfony2在其中查找控制器(等等)。

通常的symfony发行版可以在没有任何额外(应用程序)包的情况下工作,这取决于您想从完整的堆栈框架中使用多少功能。

例如,你的控制器可以是任何可调用的,可以放在你的项目结构的任何地方,只要他们被自动加载。

在路由定义文件中,你可以使用:

test:
    pattern:   /test
    defaults:  { _controller: Controller\Test::test }

它可以是任何普通的php对象,只是通过它必须返回一个Symfony\Component\HttpFoundation\Response对象而与框架绑定。

你的树枝模板(或其他)可以像app/Resources/views/template.html。可以使用::template.html进行渲染。树枝逻辑名。

所有DI服务都可以在app/config/config中定义。Yml(或从app/config/services导入。例如Yml,所有服务类也可以是任何普通的旧PHP对象。完全不依赖于框架。

所有这些都是由symfony全堆栈框架默认提供的。

当您想要使用翻译文件(如xliff)时就会遇到问题,因为它们只能通过包来发现。

symfony-light发行版旨在通过发现通常只能通过捆绑包才能发现的所有内容来解决这类问题。

Symfony框架非常适合快速启动概念验证,所有代码都可以进入src/中的默认bundle应用程序中

在这个包中,您可以按照自己的意愿构建代码。

之后,如果你想使用其他技术来开发POC,你可以很容易地翻译它,因为你不需要在包概念中构建所有的代码。

对于所有的概念,你没有极端。捆绑很好,但捆绑一切,每天都不好。

也许您可以使用Silex (Symfony微框架)来开发概念验证,以减少捆绑包第三方的影响。

您可以使用KnpRadBundle,它试图简化项目结构。

另一种方法是使用src/Company/Bundle/ frontenbundle来处理捆绑包,使用src/Company/Stuff/Class.php来处理独立于symfony并且可以在框架之外重用的类

由于已经过去了5年,这里有更多关于Symfony Bundles的文章。

Symfony中的捆绑包是什么?Iltar van der Berg。

TLDR:

您的应用程序中是否直接需要多个捆绑包?最有可能的 不是。你最好写一个AppBundle来防止意大利面条 依赖关系。您可以简单地遵循最佳实践,它就会实现 工作很好。

《Symfony: How to Bundle》作者:Toni Uebernickel。

TLDR:

仅为应用程序逻辑创建一个名为AppBundle的bundle。 一个AppBundle -但请不要把你的应用逻辑放在那里!