Skip to content

[Workflow] Don't use VariableNode for ArrayNode #39328

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

Nyholm
Copy link
Member

@Nyholm Nyholm commented Dec 5, 2020

Q A
Branch? 5.2
Bug fix? yes
New feature? no
Deprecations? no
Tickets
License MIT
Doc PR

This change could break some applications that have defined:

framework:
    workflows:
        acme:
            events_to_dispatch: null

They should just remove the events_to_dispatch line or define it as an empty array.

I don't see why it was defined as a VariableNode in the first place. It was introduced here #37815, maybe @lyrixx can help me here?

#SymfonyHackday

@@ -384,13 +384,9 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode)
->defaultValue([])
->prototype('scalar')->end()
->end()
->variableNode('events_to_dispatch')
->defaultValue(null)
->arrayNode('events_to_dispatch')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

an arrayNode must use either ->children or prototype for it to work fine (otherwise, it will be an array node using children() but with no allowed children, which is useless)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw, once you change that to a proper prototype, the validate function can then be moved to the prototype instead of looping over the array, which would report the invalid value to a more precise location

@stof
Copy link
Member

stof commented Dec 5, 2020

@Nyholm your implementation forbids setting null as value, which is the way to configure the component to dispatch all events.

@lyrixx
Copy link
Member

lyrixx commented Dec 5, 2020

Hello,

We wanted something a bit complexe here. We want to be able to

  • use the default configuration events_to_dispatch: ~
  • uses no event events_to_dispatch: [] <- this is the pain point
  • use A, B, C, events: events_to_dispatch: [A, B, C]

This is why we ended with the current code. IIRC, we have tests for this. So If you achieve to make the code simpler, without having to edit the fixtures, it will be nice :)

When I finished #37815, I search for simpler code (may be not enought) but I can not find a better way.

@Nyholm
Copy link
Member Author

Nyholm commented Dec 5, 2020

I see. Thank you for the context and the review.

I was dumping configuration reference and saw that the yaml produced was invalid. That is why I wanted to fix this. (it looked like a mistake). I'll see if I can fix the dumper instead.

@Nyholm
Copy link
Member Author

Nyholm commented Dec 5, 2020

Im closing this in favor of #39336

@Nyholm Nyholm closed this Dec 5, 2020
fabpot added a commit that referenced this pull request Dec 5, 2020
…r VariableNode with array example (Nyholm)

This PR was merged into the 4.4 branch.

Discussion
----------

[Config] YamlReferenceDumper: No default value required for VariableNode with array example

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? |
| Tickets       |
| License       | MIT
| Doc PR        |

This will fix #39328 in a better way.

A `VariableNode` may have an array as value and also a default value as "null". (Like the workflow component).
When we dump the config, we generate invalid yaml:

```
    workflows:
        enabled:              false
        workflows:
            # Prototype
            name:
                # Select which Transition events should be dispatched for this Workflow
                events_to_dispatch:   null

                    # Examples:
                    - workflow.enter
                    - workflow.transition

```

With this PR, we will remove the `null` default value from the dumped config.

#SymfonyHackday

Commits
-------

9104fd4 [Config] YamlReferenceDumper: No default value required for VariableNode with array example
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants