Kam*_*l P 5 php doctrine symfony
我有一个使用我的附加包的项目.此捆绑包连接到其他数据库,我需要配置另一个数据库.
我希望在2个配置文件中建立此连接.
主配置:
# ROOT/app/config/config.yml:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
Run Code Online (Sandbox Code Playgroud)
捆绑配置:
# src/SecondBundle/Resources/config/config.yml
doctrine:
dbal:
connections:
secondBundle:
driver: "%secondBundle.database_driver%"
host: "%secondBundle.database_host%"
port: "%secondBundle.database_port%"
dbname: "%secondBundle.database_name%"
user: "%secondBundle.database_user%"
password: "%secondBundle.database_password%"
charset: UTF8
Run Code Online (Sandbox Code Playgroud)
捆绑扩展文件:
class SecondBundleExtension 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('config.yml');
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,一切看起来都不错,但是当我试图运行时,我已经沟通:
没有扩展能够加载"doctrine"的配置
您可以声明特定于您的包的第二个驱动程序(SecondBundle
在您的示例中使用PrependExtensionInterface
.
首先将您的config.yml
文件重命名SecondBundle
为doctrine.yml
(或不是 的任何其他名称config.yml
)。
现在SecondBundleExtension
像这样改变你的班级:
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Parser as YamlParser;
// ...
class SecondBundleExtension extends Extension implements PrependExtensionInterface
{
public function load(array $configs, ContainerBuilder $container)
{
// ...
}
public function prepend(ContainerBuilder $container)
{
$yamlParser = new YamlParser();
try {
$doctrineConfig = $yamlParser->parse(
file_get_contents(__DIR__.'/../Resources/config/doctrine.yml')
);
} catch (ParseException $e) {
throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML.', $file), 0, $e);
}
$container->prependExtensionConfig('doctrine', $doctrineConfig['doctrine']);
}
}
Run Code Online (Sandbox Code Playgroud)
secondBundle
当您启用捆绑包时,您的连接现在将自动注册。
您可以将额外的配置添加到您的导入中app/config/config.yml
,以便将其合并到完整的config
.
app/config/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: '@SecondBundle/Resources/config/config.yml' }
Run Code Online (Sandbox Code Playgroud)
由于自a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)
3.0 版以来,已用引号进行了更新。
归档时间: |
|
查看次数: |
1016 次 |
最近记录: |