我正在尝试创建一个模型类(将使用DBAL),并且我想将它用作我的包中的服务。
我尝试在我的捆绑包中使用此配置创建服务:
services:
X:
class: X
arguments: [@database_connection]
但事实是我不想在app / config / config.yml中配置此服务,因为它只会在一个包中使用。
有没有办法创建特定的捆绑服务,并为该类提供 @database_connection 参数?或者我被迫为我的所有应用配置它?
我的目标只是为我的控制器和我的模型提供不同的类,而不使用Doctrine ORM / Entity,只使用DBAL。
答案 0 :(得分:1)
是的,每个捆绑包都有自己的配置文件。
# src/Acme/YourBundle/Resources/config/services.yml
services:
X:
class: X
arguments: [@database_connection]
捆绑配置通过DIC加载。所以你的包中的这个文件很重要
// src/Acme/YourBundle/DependencyInjection/AcmeYourBundleExtension.php
namespace Acme\YourBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class AcmeYourExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
通常,您应该在特定包services.yml
中而不是config.yml
中配置所有服务。所以你可以重复使用它们。但是该服务对于整个应用程序而言不仅对于捆绑包而言是可见的。但这应该没问题。