首先:在 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;
}
...
}
另一种可能性是使 CSV 文件的文件名可通过config.yml
(参见Symfony2 食谱中的这篇文章)配置,并在您在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