Конструктор дерева конфигурации Symfony useAttributeAsKey не работает должным образом - PullRequest
0 голосов
/ 17 ноября 2018

извините за название, которое я знаю, не так объяснительно, как хотелось бы.

Я создаю файл конфигурации для пакета и хочу, чтобы этот элемент en был определен несколькими способами.

Это разные способы определения моей записи:

properties:
  property1: ~
  property2: ~
  property3: Custom label3
  property4:
    label: Custom label4
    type: int

Или

properties:
  - property1
  - property2
  - { property: property3, label: Custom label3 }
  - { property: property4, label: Custom label4, type: int }

Обе конфигурации должны привести к следующей структуре:

"properties" => [
  "property1" => [
     "label": null
     "type": null
  ], 
  "property2" => [
     "label": null
     "type": null
  ], 
  "property3" => [
     "label": "Custom label 3"
     "type": null
  ], 
  "property4" => [
     "label": "Custom label 4"
     "type": "int"
  ], 
]

Это текущий код, который у меня есть:

->arrayNode('properties')
    ->useAttributeAsKey('property')
    ->arrayPrototype()
        ->beforeNormalization()
            ->ifString()->then(function($item) { return ['property' => $item]; })
        ->end()
        ->children()
            ->scalarNode('property')->defaultNull()->end()
            ->scalarNode('label')->defaultNull()->end()
            ->scalarNode('type')->defaultNull()->end()
        ->end()
    ->end()
->end()

С первым кодом я получаю следующий результат, который почти идеален:

"properties" => array:4 [
  "property1" => array:3 [
    "property" => null
    "label" => null
    "type" => null
  ]
  "property2" => array:3 [
    "property" => null
    "label" => null
    "type" => null
  ]
  "property3" => array:3 [
    "property" => "Custom label3"
    "label" => null
    "type" => null
  ]
  "property4" => array:3 [
    "label" => "Custom label4"
    "type" => "int"
    "property" => null
  ]
]

В каждой записиу него есть "property" => null. Как я могу удалить свойство, которое уже есть в ключе?

Во втором примере я получаю следующий результат:

"properties" => array:4 [
  0 => array:3 [
    "property" => "property1"
    "label" => null
    "type" => null
  ]
  1 => array:3 [
    "property" => "property2"
    "label" => null
    "type" => null
  ]
  "property3" => array:3 [
    "label" => "Custom label 3"
    "property" => null
    "type" => null
  ]
  "property4" => array:3 [
    "label" => "Custom label 4"
    "type" => "int"
    "property" => null
  ]
]

Как вы можете видетьпервые две записи не имеют property в качестве ключа, у него есть номер, как у обычного массива. Как я могу это решить?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...