【问题标题】:Passing variables to YML file from PHP while parsing YML在解析 YML 时将变量从 PHP 传递到 YML 文件
【发布时间】:2017-01-10 10:34:40
【问题描述】:

这是我的 YML 文件:

edit: '0'
parent: '0'
seo_title: 'gallery |'
seo_description: ''
seo_keywords: ''
fbtab: '0'
status: '1'
exceptions: {% pageType %}
calltoaction: 0

在 PHP 文件中:

$pageType = "something";
dump(Yaml::parse(file_get_contents('pathToYmlFile')));

问题是将$pageType 传递给YML 文件

【问题讨论】:

  • 你到底想做什么?将变量添加到文件并覆盖原始文件?你有没有尝试过?
  • 我已经尝试使用 %variable% 并且实际上我没有找到太多关于将变量传递给 yml 的文档,所以使用 Symfony yml 包

标签: php laravel variables yaml template-engine


【解决方案1】:

YAML 不是模板语言。它不了解变量替换。你有两个选择:

  • 在解析 YAML 文件之前使用模板语言对其进行预处理。例如,这是在 SaltStack 中使用 YAML 和 Jinja 完成的。
  • 在解析后 在加载的字符串中进行替换。这仅对某些特定用例有意义,例如某些 YAML 值总是会被​​变量值替换,但可以在 YAML 中选择多个不同的变量进行替换。

第三种选择是使用 YAML tags 来表示你给的值是一个变量名。示例:

exceptions: !var pageType

!var 在这里为以下标量 pageType 定义了一个显式标记。大多数 YAML 实现都允许您为 !var 标记的标量注册自定义构造函数 - 不幸的是,Symphony 的 YAML 组件不具备执行此类操作的能力,因此您不能选择这样做。

【讨论】:

    【解决方案2】:

    你实际上并不需要这个。

    请记住,您将 YAML 文件转换为 PHP 结构。

    你解析它之后,你可以用那个结构做任何你想做的事情。因此,您可以将所需的值分配给相应的字段。

    伪代码:

    $pageType = "something";
    $parsed = Yaml::parse(file_get_contents('pathToYmlFile'));
    $parsed->exceptions = $pageType;
    

    您没有指定您的特定用例,但就我从您的代码示例中看到的而言,它适合。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2012-10-14
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2021-08-28
      • 2022-11-05
      相关资源
      最近更新 更多