-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
[Workflow] Fix code blocks using an enum #21499
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -361,11 +361,11 @@ | |
<framework:config> | ||
<!-- or type="state_machine" --> | ||
<framework:workflow name="blog_publishing" type="workflow" places="App\Enumeration\BlogPostStatus::*"> | ||
<framework:marking-store type="single_state"> | ||
<framework:initial-marking>draft</framework:initial-marking> | ||
<framework:marking-store type="method"> | ||
<framework:argument>status</framework:argument> | ||
</framework:marking-store> | ||
<framework:support>App\Entity\BlogPost</framework:support> | ||
<framework:initial-marking>draft</framework:initial-marking> | ||
|
||
<framework:transition name="to_review"> | ||
<framework:from>draft</framework:from> | ||
|
@@ -391,33 +391,36 @@ | |
use Symfony\Config\FrameworkConfig; | ||
|
||
return static function (FrameworkConfig $framework): void { | ||
$blogPublishing = $framework->workflows()->workflows('blog_publishing'); | ||
$blogPublishing = $framework->workflows()->workflow('blog_publishing'); | ||
$blogPublishing | ||
->type('workflow') | ||
->supports([BlogPost::class]) | ||
->initialMarking([BlogPostStatus::Draft]); | ||
->initialMarking([BlogPostStatus::Draft->value]); | ||
|
||
$blogPublishing->markingStore() | ||
->type('method') | ||
->property('status'); | ||
|
||
$blogPublishing->places(BlogPostStatus::cases()); | ||
$blogPublishing->place(BlogPostStatus::Draft->value); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is not the equivalent of the Yaml code snippet, which references the enum itself instead of registering each case separately. The equivalent of the Yaml snippet would be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. AFAIU there is no equivalent to the YAML syntax using PHP. Passing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @MatTheCat is right, there's no equivalent using the fluent PHP-DSL There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah, wait, this works: |
||
$blogPublishing->place(BlogPostStatus::Reviewed->value); | ||
$blogPublishing->place(BlogPostStatus::Published->value); | ||
$blogPublishing->place(BlogPostStatus::Rejected->value); | ||
|
||
$blogPublishing->transition() | ||
->name('to_review') | ||
->from(BlogPostStatus::Draft) | ||
->to([BlogPostStatus::Reviewed]); | ||
->from([BlogPostStatus::Draft->value]) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is this really needed ? The Yaml code snippet uses the enum case, not the value. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The PHP config would support an enum, but not in an array. Since arrays are used everywhere else I preferred to keep consistency. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This fails with
My advice: the array-shape format is way more flexible: it allows to diverge from the shape and still have normalizers make it work. (Which means we can also improve the shape-generator independently) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could also take this as an opportunity to improve the config generators, so that eg enums are accepted in the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. all the block works this way $blogPublishing->transition()
->name('to_review')
->from(BlogPostStatus::Draft)
->to(BlogPostStatus::Reviewed);
$blogPublishing->transition()
->name('publish')
->from(BlogPostStatus::Reviewed)
->to(BlogPostStatus::Published);
$blogPublishing->transition()
->name('reject')
->from(BlogPostStatus::Reviewed)
->to(BlogPostStatus::Rejected); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Related: symfony/symfony#62082, to allow enums in |
||
->to([BlogPostStatus::Reviewed->value]); | ||
|
||
$blogPublishing->transition() | ||
->name('publish') | ||
->from([BlogPostStatus::Reviewed]) | ||
->to([BlogPostStatus::Published]); | ||
->from([BlogPostStatus::Reviewed->value]) | ||
->to([BlogPostStatus::Published->value]); | ||
|
||
$blogPublishing->transition() | ||
->name('reject') | ||
->from([BlogPostStatus::Reviewed]) | ||
->to([BlogPostStatus::Rejected]); | ||
->from([BlogPostStatus::Reviewed->value]) | ||
->to([BlogPostStatus::Rejected->value]); | ||
}; | ||
|
||
The component will now transparently cast the enum to its backing value | ||
when needed and vice-versa when working with your objects:: | ||
|
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why
initial-marking
is in a sequence; I moved it so that the XML is valid.