我正在开发一个依赖另一个的捆绑包。
为了处理尚未安装基本包的情况,我想在控制器内执行“bundle_exists()”函数。
问题是:如何获得已安装捆绑包的列表或如何检查捆绑包的名称(最终还有版本)。
感谢。
答案 0 :(得分:6)
除了@ Rooneyl的回答:
进行此类检查的最佳位置是your DI extension内(例如AcmeDemoExtension
)。一旦构建容器并将其转储到缓存,就会执行此操作。没有必要在每个请求上检查这样的事情(容器在缓存时不会改变),它只会减慢你的缓存。
// ...
class AcmeDemoExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$bundles = $container->getParameter('bundles');
if (!isset($bundles['YourDependentBundle'])) {
throw new \InvalidArgumentException(
'The bundle ... needs to be registered in order to use AcmeDemoBundle.'
);
}
}
}
答案 1 :(得分:4)
您的班级需要访问容器对象(通过扩展或DI) 那你可以做;
$this->container->getParameter('kernel.bundles');
这将为您提供已安装的软件包列表。
更新;
如果您位于扩展Symfony\Bundle\FrameworkBundle\Controller\Controller
的控制器中或扩展Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
的命令类中,则可以获取参数。
$this->getParameter('kernel.bundles')
。
Else @Wouter J的答案是你最好的答案。
答案 2 :(得分:1)
您可以从内核中获取所有Bundles的列表,如下所示:
public function indexAction ()
{
$arrBundles = $this->get("kernel")->getBundles();
if (!array_key_exists("MyBundle", $arrBundles))
{
// bundle not found
}
}
答案 3 :(得分:0)
安德烈在这个问题:How do I get a list of bundles in symfony2?
如果要调用已注册的bundle对象(非class)的非静态方法,则可以执行以下操作:
$kernel = $this->container->get('kernel');
$bundles = $kernel->getBundles();
$bundles['YourBundleName']->someMethod();
其中'YourBundleName'
是您的捆绑包的名称,您可以通过从控制台调用来获取:
php app/console config:dump-reference