symfony 3.1检查是否安装了软件包

时间:2016-08-11 08:10:03

标签: symfony symfony-3.1

我正在开发一个依赖另一个的捆绑包。

为了处理尚未安装基本包的情况,我想在控制器内执行“bundle_exists()”函数。

问题是:如何获得已安装捆绑包的列表或如何检查捆绑包的名称(最终还有版本)。

感谢。

4 个答案:

答案 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