【问题标题】:Confused on Symfony2 YAML imports对 Symfony2 YAML 导入感到困惑
【发布时间】:2015-02-27 17:07:37
【问题描述】:

我是 Symfony 的新手,对 config.yml 顶部的 imports 键有点困惑。我正在尝试将 /our_stuff/admin/version.yml 导入 Symfony 的 config.yml 文件。

这是我的config.yml 文件的样子:

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: '/our_stuff/admin/version.yml' }

这是我的 version.yml 文件中的内容

version:
  last_recorded_software_version: '10.12.1'

但这会产生错误:

FileLoaderLoadException: Cannot import resource "/our_stuff/admin/version.yml" from "/our_stuff/admin/symfony/app/config/config.yml". (There is no extension able to load the configuration for "last_recorded_software_version" (in /our_stuff/admin/version.yml). 
    Looked for namespace "last_recorded_software_version", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "web_profiler", "sensio_distribution")

为了测试,我还将version.yml 文件移到了 Symfony 的配置文件夹中。路径是symfony_root/app/config/,但这仍然会产生相同的错误。

为什么导入的默认 YAML 文件适用于 Symfony 中包含的文件,而不适用于我包含的文件?

编辑为清晰起见进行了编辑

编辑 2 这是/our_stuff/admin/version.yml 文件的全部内容:

# Update this variable ONLY RIGHT BEFORE creating a new numbered release 
version:
  last_recorded_software_version: '10.12.1'

编辑3解决办法:

version.yml 文件需要有parameters 的命名空间才能在config.yml 文件中读取它们

# app/config/config.yml
imports:
    - { resource: 'parameters.yml' }
    - { resource: '/etc/sites/mysite.com/parameters.yml' }





#/etc/sites/mysite.com/version.yml
parameters:
   some_key:
      some_other_key: value
      some_other_key1: value
      ...

【问题讨论】:

  • 您导入的参数文件需要命名为parameters,而您似乎在根命名空间中有last_recorded_software_version
  • 您的问题是什么?您在 YAML 文件中放置了什么?怎么了?
  • 嘿抱歉,我的问题措辞很糟糕。我想将version.yml 导入config.yml。在version.yml 中,last_recorded_software_version 键位于version: 下。那是对的吗?即使使用命名空间,它仍然给我一个错误。

标签: symfony yaml


【解决方案1】:

您可以将配置文件存储在项目目录之外或项目目录中,并且可以包括检查此链接global-configuration-files

你可以像这样包含你的配置文件:

# app/config/config.yml
imports:
    - { resource: 'parameters.yml' }
    - { resource: '/etc/sites/mysite.com/parameters.yml' }

您的 version.yml 文件格式应为:

parameters:
   some_key:
      some_other_key: value
      some_other_key1: value
      ...

【讨论】:

  • 这正是我想做的,但是,我仍然收到错误FileLoaderLoadException: Cannot import resource "/our_stuff/admin/version.yml" from "/our_stuff/admin/symfony/app/config/config.yml". (There is no extension able to load the configuration for "version" (in /our_stuff/admin/version.yml). Looked for namespace "version", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "web_profiler", "sensio_distribution")
  • 你可以发布你的 version.yml 文件来审查它。我认为问题在于您的配置,而不是您导入它的方式。
  • 我对原始问题进行了编辑,发布了我的全部 version.yml 文件
  • 现在更新了我的答案,请在你的 yml 中添加参数并尝试一下。
【解决方案2】:

Symfony 中的所有配置文件都由配置组件解析。 Symfony 应用程序默认只导入一个文件:config_%environment%.yml。该文件有 3 个对 Symfony 具有重要价值的预定义部分:

  • 进口

    包含将由配置组件在处理中导入的资源数组。这些资源可能是xmlyml 甚至是php 将返回数组的文件。

  • 服务

    包含对 ServiceContainer 具有非常重要价值的服务定义,它将从此配置部分创建服务。

  • 参数

    对 ServiceContainer 具有重要价值的参数将管理容器参数部分中包含的所有值。如果你想从服务容器中获取参数,你应该在这里定义它。

您还可以在捆绑包的配置类中导入任何配置文件。

如果您将配置文件导入到 imports 块或捆绑包的 Configuration 类中,您应该将它们放在适当的部分:parametersservices .

如所要求的示例:

parameters.yml

parameters:
    param: value1
    array: {key1: value2}

services.yml

services:
    class: FQCN/To/Your/Class

【讨论】:

    【解决方案3】:

    如果你把你的 version.config 放在某个包下,你必须像这样导入它:

    - { resource: "@AAA/YourBundle/Resources/config/version.yml" }
    

    否则您的第一次导入将完美运行:

    - { resource: version.yml }
    

    【讨论】:

    • 我可以在 Symfony 项目之外导入一个 yaml 文件吗?说它是否存储在 /home/user 中?还是必须在 Symfony 项目中
    • 这不是链接到 symfony 项目中本地文件的正确方法,我认为您的文件应该在您的项目下以某种方式,因此当您在其他服务器下部署应用程序时,文件仍然可以访问。
    • 我在尝试使用 - { resource: version.yml } 时遇到同样的错误。我将version.yml 文件移动到同一文件夹config.yml。路径是:symfony_project/app/config/。错误仍然是FileLoaderLoadException: Cannot import resource "/our_stuff/admin/symfony/app/config/version.yml" from "/our_stuff/admin/symfony/app/config/config.yml". (There is no extension able to load the configuration for "version" (in /our_stuff/admin/symfony/app/config/version.yml). Looked for
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多