【发布时间】:2016-01-31 07:44:13
【问题描述】:
我想要实现的是:我的应用程序中的一些服务带有一个特殊的注释。稍后,在构建过程中,一个特殊的命令应该找到所有带有该注释的文件。
我的做法是先加载所有的bundle:
$container = $this->getContainer();
foreach ($container->getParameter('kernel.bundles') as $alias => $namespace)
$bundle = $container->get('kernel')->getBundle($alias);
我被困在这一点上。如何让$bundle 实例告诉我它的服务?
注意:我也很高兴有一个不是特定于捆绑包的解决方案,即加载所有可用服务定义的解决方案。 ContainerBuilder 有一个 getDefinitions,看起来很有希望,虽然我不知道如何通过命令访问它。
我需要获取一个包含服务 ID 及其类的列表——尤其是类,因为这些是我需要加载到注释阅读器中的那些。
显然,我不想自己解析services.yml,并且我还想避免从$container->getServiceIds() 加载每个服务的实例。
(顺便说一句,tagged services 不会有帮助;我需要注释。我想自动检测带注释的服务,因为标记它们需要额外的步骤,这是不必要且容易出错的。)
【问题讨论】:
-
您可能需要重新考虑您的方法。您可以查看缓存目录以查看容器对其可用的信息。您不会找到捆绑信息。事实上,完全可以在包之外定义服务。也许标记服务是您正在寻找的? symfony.com/doc/current/components/dependency_injection/…
-
感谢您提供标记服务的建议,但它们不是我想要的。我已经通过澄清 w.r.t 更新了这个问题。标记服务。
标签: php symfony dependency-injection