Business logic 依赖项Symfony2

Business logic 依赖项Symfony2,business-logic,symfony,Business Logic,Symfony,我想知道是否有一种正确的方法来检查依赖关系 例如,我有一个新闻包。现在我必须检查是否有CommentBundle。如果有,它应该执行更多的代码 有什么建议吗?您可以使用每个捆绑包都应该拥有的主捆绑包类上存在的类 例如: if (class_exists('Acme\CommentBundle\AcmeCommentBundle')) { // Bundle exists and is loaded by AppKernel... } 除了markymark的答案外,您还可以使用以下代码

我想知道是否有一种正确的方法来检查依赖关系

例如,我有一个
新闻包
。现在我必须检查是否有
CommentBundle
。如果有,它应该执行更多的代码


有什么建议吗?

您可以使用每个捆绑包都应该拥有的主捆绑包类上存在的类

例如:

if (class_exists('Acme\CommentBundle\AcmeCommentBundle'))
{
    // Bundle exists and is loaded by AppKernel...
}

除了markymark的答案外,您还可以使用以下代码片段检查控制器(或任何其他容器感知代码)中是否存在特定服务:

if ($this->container->has('foo_service.alias'))
{
    // service is loaded and usable
}
如果您不确定某个特定服务的确切别名,或者只是为了好玩或咯咯笑,您可以运行console命令
php-app/console-container:debug
,查看容器中注册的所有服务。

该类包含一个帮助程序方法列表,用于检查某个类是否是活动捆绑包的一部分或是否注册了捆绑包

public BundleInterface[] getBundles()
    Gets the registered bundle instances.

public bool isClassInActiveBundle(string $class)
    Checks if a given class name belongs to an active bundle.

+1、你的答案对我来说更清楚、更正确,正如上面的答案一样。最好是请求服务,而不是捆绑包。亲爱的@markymark,你确定这会给你正确的结果吗?想象一下这样的情况:文件系统上存在bundle,但未在
AppKernel
中注册(这意味着两个bundle的路由和服务都未加载)。“class\u exists('Some\Name\Space\class')将尝试自动加载该类,即使该类未在捆绑包中注册,这难道不是真的吗?我想知道你怎么看?HTHSee