【问题标题】:Symfony YAML : Formatting the OutputSymfony YAML:格式化输出
【发布时间】:2019-10-24 19:24:23
【问题描述】:

我正在使用 Symfony YAML 组件来建模和输出一个 yml 文件。

我想要达到的目标如下:

id: my-page
name: My Page
fields:
  pageTitle: My Page Title
placeholders:
  project-main:
    - component: MyComponent
      fields:
        imageSmall:
          src: /path/to/image.jpg
        imageMed:
          src: /path/to/image.jpg

我几乎可以做到这一点,只需要帮助来了解我需要如何从 componentName 开始形成这条线。我目前得到的结果如下:

id: my-page
name: My Page
fields:
    pageTitle: 'My Page Title'
placeholders:
    project-main: { component: MyComponent, 0: { fields: { imageSmall: 'src: /path/to/image.jpg', imageMed: 'src: /path/to/image.jpg' } } }

虽然这是我用来获取它的 PHP 代码,但如下:

use Symfony\Component\Yaml\Yaml;
use Symfony\Component\Yaml\Exception\ParseException;

$array = array(
    "id" => "my-page",
    "name" => "My Page",
    "fields" => ["pageTitle" => "My Page Title"],
    "placeholders" => ["project-main" => array("component" => "MyComponent", array("fields"=>array("imageSmall" => "src: /path/to/image.jpg","imageMed" => "src: /path/to/image.jpg")))]);

$yaml = Yaml::dump($array);

file_put_contents('file.yaml', $yaml);

任何人都可以帮助我走上正轨:)?

**

  • 更新

**

我已经按照 cmets 中的提示更新了 PHP 如下:

$array = array(
    "id" => "my-page",
    "name" => "My Page",
    "fields" => ["pageTitle" => "My Page Title"],
    "placeholders" => ["project-main" => ["component" => "MyComponent", "fields"=>array("imageSmall" => "src: /path/to/image.jpg","imageMed" => "src: /path/to/image.jpg")]]);

$yaml = Yaml::dump($array,4);

file_put_contents('file.yaml', $yaml);

在这之后,我的输出如下:

id: my-page
name: My Page
fields:
  pageTitle: My Page Title
placeholders:
  project-main:
    component: MyComponent
    fields:
      imageSmall:
        src: /path/to/image.jpg
      imageMed:
        src: /path/to/image.jpg

所以我移动了一点,但仍然得到“组件:我的组件”而不是“-组件:我的组件”。关于解决最后一个问题的任何提示:)?

【问题讨论】:

  • dump() 方法的第二个参数用于控制转储程序在哪个级别切换到内联表示法。它的默认值为2。您可能希望像这样为您的用例增加它:$yaml = Yaml::dump($array, 4);
  • @xabbuh 我试过了,但输出完全一样:/
  • 我可以看到不同的结果。你使用哪个版本的 Yaml 组件?
  • 好的,确实如此——现在它改变了。唯一的问题是,在符号中,它仍然保持为“component: MyComponent”而不是“-component: MyComponent”

标签: php html arrays symfony yaml


【解决方案1】:

要控制转储程序切换到使用内联符号的级别,您必须将所需级别作为第二个参数传递给dump() 方法(默认值为2)。

要在转储时获得预期的结构,您需要调整当前不代表您期望的输入数组:

use Symfony\Component\Yaml\Yaml;

$array = [
    'id' => 'my-page',
    'name' => 'My Page',
    'fields' => ['pageTitle' => 'My Page Title'],
    'placeholders' => [
        'project-main' => [
            [
                'component' => 'MyComponent',
                'fields' => [
                    'imageSmall' => [
                        'src' => '/path/to/image.jpg',
                    ],
                    'imageMed' => [
                        'src' => '/path/to/image.jpg',
                    ],
                ],
            ],
        ],
    ],
];

$yaml = Yaml::dump($array, 6);

【讨论】:

  • 我仍然有完全相同的问题,它显示“组件:MyComponent”而不是“-组件:MyComponent”,并且“字段”在同一级别而不是孩子:/跨度>
  • 你能用你现在拥有的确切代码更新你的描述吗?我很确定您的 $array 变量没有像您期望的那样组成。
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2016-02-26
  • 1970-01-01
  • 2012-08-28
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多