まず、YAML サービスとパラメーターの定義では、@ は別のサービスも参照します。そのため、コードが機能しません。
基本的に、2 つの可能性があります。最初の簡単な方法は、バンドルで相対パスを使用し、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;
}
...
}
もう 1 つの可能性は、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