我如何引用services.yml中的数据文件,该文件位于相同或任何包中?
我发送了一个csv文件,我想作为参数注入。
它在我使用直接路径时起作用:
mybundle.data.csv: %kernel.root_dir%/../vendor/mybundle/my-bundle/mybundle/MyBundle/Resources/data/data.csv
这是非常冗长和不灵活的,因此我正在寻找一个解决方案,如:
data.csv: "@MyBundle/Resources/data/data.csv"
但这不起作用:
...依赖于不存在的服务 “mybundle /资源/数据/ data.csv”。
任何想法?
答案 0 :(得分:4)
@ - 现在支持yaml中的转义
https://github.com/symfony/symfony/issues/4889
您可以像这样使用
data.csv: "@@MyBundle/Resources/data/data.csv"
答案 1 :(得分:3)
首先:在YAML服务和参数定义中,@也指另一个服务。这就是你的代码不起作用的原因。
基本上你有两种可能性。第一个也是最简单的方法是使用捆绑包services.yml
中的相对路径并将其附加到CSV类中。
例如:
# src/Acme/DemoBundle/Resources/config/services.yml
parameters:
data.csv: "Resources/data/data.csv"
在课程中,您要阅读CSV文件:
// src/Acme/DemoBundle/Import/ReadCsv.php
...
class ReadCsv
{
...
public function __construct($csvFile)
{
$this->csvFile = __DIR__.'/../'.$csvFile;
}
...
}
另一种可能性是通过config.yml
配置CSV文件的文件名(参见this article in the Symfony2 cookbook)并在您AcmeDemoBundleExtension
类中替换的配置值中插入一个特殊的占位符:
// src/Acme/DemoBundle/DependencyInjection/AcmeDemoBundleExtension.php
...
public function load(array $configs, ContainerBuilder $container)
{
...
$container->setParameter('acme_demo.csv_file', str_replace('__BUNDLE_DIR__', __DIR__'./.., $config['csv_file']);
}
...
您的config.yml
看起来像是:
# app/config/config.yml
acme_demo:
csv_file: __BUNDLE_DIR__/Resources/data/data.csv