symfony 3.1 检查是否安装了一个包
symfony 3.1 Check if a bundle is installed
我正在开发一个依赖于另一个的包。
为了处理未安装基本包的情况,我想在控制器中执行 "bundle_exists()" 功能。
问题是:如何获得已安装捆绑包的列表或如何检查捆绑包的名称(最终也是版本)。
谢谢。
您的 class 需要访问容器对象(通过扩展或 DI)。
那你可以做;
$this->container->getParameter('kernel.bundles');
这将为您提供已安装的捆绑包列表。
更新;
如果您在扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller
的控制器中或在扩展 Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
的命令 class 中,您可以只获取参数。
$this->getParameter('kernel.bundles')
.
Else @Wouter J 的回答是您的最佳答案。
您可以像这样从内核中获取所有 Bundle 的列表:
public function indexAction ()
{
$arrBundles = $this->get("kernel")->getBundles();
if (!array_key_exists("MyBundle", $arrBundles))
{
// bundle not found
}
}
除了@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.'
);
}
}
}
安德烈在这个问题上:How do I get a list of bundles in symfony2?
如果你想调用注册包对象的非静态方法(不是class)那么你可以这样做:
$kernel = $this->container->get('kernel');
$bundles = $kernel->getBundles();
$bundles['YourBundleName']->someMethod();
其中 'YourBundleName'
是您的包的名称,您可以通过从控制台调用来获取:
php app/console config:dump-reference
我正在开发一个依赖于另一个的包。
为了处理未安装基本包的情况,我想在控制器中执行 "bundle_exists()" 功能。
问题是:如何获得已安装捆绑包的列表或如何检查捆绑包的名称(最终也是版本)。
谢谢。
您的 class 需要访问容器对象(通过扩展或 DI)。
那你可以做;
$this->container->getParameter('kernel.bundles');
这将为您提供已安装的捆绑包列表。
更新;
如果您在扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller
的控制器中或在扩展 Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
的命令 class 中,您可以只获取参数。
$this->getParameter('kernel.bundles')
.
Else @Wouter J 的回答是您的最佳答案。
您可以像这样从内核中获取所有 Bundle 的列表:
public function indexAction ()
{
$arrBundles = $this->get("kernel")->getBundles();
if (!array_key_exists("MyBundle", $arrBundles))
{
// bundle not found
}
}
除了@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.'
);
}
}
}
安德烈在这个问题上:How do I get a list of bundles in symfony2?
如果你想调用注册包对象的非静态方法(不是class)那么你可以这样做:
$kernel = $this->container->get('kernel');
$bundles = $kernel->getBundles();
$bundles['YourBundleName']->someMethod();
其中 'YourBundleName'
是您的包的名称,您可以通过从控制台调用来获取:
php app/console config:dump-reference