我如何引用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 / resources / data / data.csv”。

有任何想法吗?

#1楼 票数:4

现在支持yaml中的@ -escaping

https://github.com/symfony/symfony/issues/4889

你可以像这样使用它

data.csv: "@@MyBundle/Resources/data/data.csv"

#2楼 票数:3 已采纳

首先:在YAML服务和参数定义中,@也指另一个服务。 这就是你的代码不起作用的原因。

基本上你有两种可能性。 第一个也是最简单的方法是使用bundles 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文件的文件名(参见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

  ask by ivoba translate from so

未解决问题?本站智能推荐:

1回复

自动写入services.yml文件

我想创建一个php类,该php类根据我的实体(在服务器运行或使用命令)自动在services.yml文件中写入服务。是否有可能这样做,还是应该仅使用文件系统来做到这一点?
1回复

services.yml中的Symfony服务声明

根据最新文档,我正在Symfony 3中编写服务。 我写了一堂课: 我的app / config / services.yml看起来像: 但只有我得到的是这个错误: 在C:\\ xampp \\ htdocs \\ roch \\ app / config \\
1回复

如何在services.yml中引用parameters.yml?

这是params。 应用程序/配置/ parameters.yml 这是我想用以前文件中的test param配置的服务。 MyBundle /资源/配置/ services.yml 导入不起作用。 我该怎么办? PS我知道我可以参考@service_cont
2回复

如何在services.yml文件中添加多个事件作为Doctrine symfony中的事件监听器

我用这个: 现在,如果我尝试听这样的两个事件: 它给出了一个错误。
1回复

Symfony2缓存:清除输出services.yml文件的内容

在Symfony2中,每次我通过控制台清除缓存时: 控制台会打印出我的services.yml文件的内容! 如果我通过rm -rf app/cache/*手动删除了缓存(由于控制台用户由于某种原因无法访问apache用户www-data,我必须这样做,尽管我位于同一组中,因为文件创建为
1回复

Symfony如何知道在哪里可以找到services.yml配置文件?

在Symfony 3.0中(并且我也肯定是2.X),如果我想创建一个具有依赖项的自定义约束验证器,则必须将该验证器作为服务注册到依赖项注入容器中(默认情况下在project_directory /应用/配置/使用特殊的标记(如所描述的services.yml) 这里 )。 这意味着Vali
2回复

Symfony Services:是否可以在“ services.yml”中设置公共属性?

有没有一种方法可以通过services.yml中的服务定义来设置公共变量? 原因是,我正在使用phpbrowscap库 。 要使用本地文件解析浏览器,我需要使用以下代码行: 不幸的是,这个可怜的财产是公共的,没有二传手。 它在构造函数中都不可用。 那么我将如何在se
2回复

服务容器如何创建在services.yml中声明的对象?

考虑以下代码: job_service需要JobeetBundle:Category存储库才能工作。 该存储库将传递给服务构造函数。 全部在services.yml中定义 因此,在这种情况下,我最终得到JobeetBundle:Category存储库类的两个实例? 如果是