fix #17993 - Deprecated callable strings#18020
Conversation
|
Thank you, I didn't understand the issue correctly. I've changed my fix. |
|
|
||
| if (is_string($preferredChoices) && !is_callable($preferredChoices)) { | ||
| $preferredChoices = new PropertyPath($preferredChoices); | ||
| } elseif(is_string($preferredChoices) && is_callable($preferredChoices)) { |
|
Not on these methods for sure. |
| if (is_string($value) && !is_callable($value)) { | ||
| $value = new PropertyPath($value); | ||
| } elseif (is_string($value) && is_callable($value)) { | ||
| @trigger_error('createListFromChoices() treats callable strings as callable and is deprecated since version 3.0.', E_USER_DEPRECATED); |
There was a problem hiding this comment.
since version 3.1 (for now)
|
You could perhaps wrap the callable string in a closure inside those elseif (is_string($label) && is_callable($label)) {
@trigger_error('createView() - $label - treats callable strings as callable and is deprecated since version 3.0.', E_USER_DEPRECATED);
$label = function ($choice) use ($label) {
return $label($choice);
};
} |
|
I have no errors doing the tests except of one in PasswordEncoder. Thanks @HeahDude for the help |
| if (is_string($value) && !is_callable($value)) { | ||
| $value = new PropertyPath($value); | ||
| } elseif (is_string($value) && is_callable($value)) { | ||
| @trigger_error('createListFromChoices() treats callable strings as callable and is deprecated since version 3.1.', E_USER_DEPRECATED); |
There was a problem hiding this comment.
If it's deprecated, what's the recommended thing to do instead? What will happen in 4.0? Please add this to the deprecation messages (and upgrade guide)
There was a problem hiding this comment.
@iltar is right. You should change each message to something like :
'Treating strings as callable is deprecated since version 3.1 and will throw an error in 4.0. You should use a "\Closure" instead.'
What error are you talking about ? |
|
Nevermind, no error anymore |
|
@Simperfit What about adding some unit tests? |
|
@fabpot I added one, will add one for each method |
|
Looks like this needs another rebase. It contains some unrelated changes. Status: Needs work |
|
@xabbuh Sorry for the unrelated changes, I've missed my rebase. |
| return $value($choices); | ||
| }; | ||
|
|
||
| return $value($choices); |
There was a problem hiding this comment.
Do we need to do all the stuff beside triggering the deprecation? Shouldn't the following code already handle the callback properly?
There was a problem hiding this comment.
I've followed the instruction of someone since I don't wanted to make bad things,
But you're right, adding the test without any code is the right thing to do.
Thanks
cd2bf8e to
22f8264
Compare
|
@fabpot I've added one test for each method, is it ok like that ? Thank you. |
| * Using callable strings as choice options in ChoiceType has been deprecated | ||
| in favor of `PropertyPath`. Use a "\Closure" instead | ||
|
|
||
| Before: |
There was a problem hiding this comment.
Ok now you got one extra here
|
I've rebased and added/removed the space :p |
c3b996d to
12975bd
Compare
| ```php | ||
| 'choice_value' => 'range', | ||
| 'choice_label' => function ($choice) { | ||
| return strtoupper($choice); |
There was a problem hiding this comment.
You misunderstood the "four" space here mean four for this line only.
Now on got one extra space from line 23 to 37 and missing 3 here one 35 :p
Sorry, after that we're done, thank you for working on this PR :)
There was a problem hiding this comment.
I hope this time it's ok :p
Np :)
| - `"form.type.submit"` | ||
| - `"form.type.reset"` | ||
|
|
||
| `ArrayAccess` in `ResizeFormListener::preSubmit` method has been removed |
There was a problem hiding this comment.
to not conflict with master it must be before your change
ok just remove it
|
Looks perfect now :) Thanks @Simperfit! This one is ready to merge now. Deprecate or revert 470b140 ? ping @symfony/decoders |
| `ArrayAccess` in `ResizeFormListener::preSubmit` method has been removed. | ||
|
|
||
| * Using callable strings as choice options in ChoiceType has been deprecated | ||
| in favor of `PropertyPath`. Use a "\Closure" instead |
There was a problem hiding this comment.
The sentence as is must be added to the UPGRADE-3.1.md file. In this file it should read like "Using callable strings as choice options in ChoiceType has been removed in favor of passing PropertyPath instances."
| `ArrayAccess` in `ResizeFormListener::preSubmit` method has been removed. | ||
|
|
||
| * Using callable strings as choice options in ChoiceType has been removed in favor of passing PropertyPath instances. | ||
|
|
There was a problem hiding this comment.
I would replace "has been removed" by "is not supported anymore".
But please wait for a symfony decider to tell you if it's ok. Thanks :)
There was a problem hiding this comment.
You are right. That sounds a bit better.
| `ArrayAccess` in `ResizeFormListener::preSubmit` method | ||
|
|
||
| * Using callable strings as choice options in `ChoiceType` has been deprecated | ||
| and will be used as `PropertyPath` instead of callable in Symfony 4.0. |
There was a problem hiding this comment.
missing space at the beginning of the line
|
i've rebased with master. |
|
IIRC, we were waiting for @Tobion's opinion about merging or reverting instead. |
|
I would revert but I'm ok with both ways. |
|
Thank you @Simperfit. |
This PR was merged into the 3.1-dev branch. Discussion ---------- fix #17993 - Deprecated callable strings | Q | A | ------------- | --- | Branch | master | Bug fix? | no | New feature? | no | BC breaks? | no | Deprecations? | yes | Tests pass? | no | Fixed tickets | #17993 | License | MIT | Doc PR | Is this ok ? - [x] Rebase when #18057 is merged Commits ------- 191b495 fix #17993 - Deprecated callable strings
|
NP @fabpot. |
Is this ok ?