Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Form] Deprecate passing ints #32821

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 2 commits into from

Conversation

vudaltsov
Copy link
Contributor

Q A
Branch? 4.4
Bug fix? no
New feature? no
BC breaks? no
Deprecations? yes
Tests pass? yes
Fixed tickets relates to #32237
License MIT
Doc PR todo?

This PR deprecates passing ints to form building methods to ease upgrade to 5.0.

ping @nicolas-grekas , @xabbuh

@@ -79,9 +79,9 @@ public function __construct(?string $name, array $options = [])
*
* This method should not be invoked.
*
* @param string|int|FormBuilderInterface $child
Copy link
Member

@nicolas-grekas nicolas-grekas Jul 30, 2019

Choose a reason for hiding this comment

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

All similar changes make sense, but I'm not sure the rest does: passing an int will just work in Symfony 5, thanks to the string type. Ppl that use strict mode won't have a smooth upgrade path that's true, but are we going to ask everyone to make their code "strict" while only some actually need it? Not sure...

Copy link
Contributor

@Tobion Tobion Jul 31, 2019

Choose a reason for hiding this comment

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

I agree that we should rely on auto casting internally. No need to forbid integers passed from users. See #32066
I don't see what these changes try to accomplish.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Tobion , these changes are for the ones calling $form->add(1) from classes with strict types enabled. Once we add string type in 5.0, they will have an error.

But now I see the point of @nicolas-grekas better (we already discussed that earlier): if a user does declare(strict_types=1), it's her responsibility to check that she passes correct arguments, because Symfony is not strict about types.

Copy link
Member

Choose a reason for hiding this comment

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

Strict types is a bad idea, you have a perfect example of why.
It provides no additional type-guarantee.
On the contrary, type declarations on signature boundaries do provide additional guarantee and thus prevent bugs.
Good news, we're adding them all in v5 when technically possible :)

Copy link
Member

Choose a reason for hiding this comment

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

See #32828 as alternative.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@nicolas-grekas , you mean 1? :)
@xabbuh, so, do you agree that we should close this?

Copy link
Member

Choose a reason for hiding this comment

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

I mean that this situation will happen to all places where we added the string type - not only on forms.

Copy link
Member

Choose a reason for hiding this comment

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

I would have only done that in places where we explicitly declared support for other data types before. But I also understand the argument about everyone having to do the type cast then (though I wouldn't expect that many people actually use integers as form names).

Copy link
Contributor Author

@vudaltsov vudaltsov Jul 31, 2019

Choose a reason for hiding this comment

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

@nicolas-grekas , yes, I got it. Should we add a note in the BC promise about that then?

Copy link
Member

Choose a reason for hiding this comment

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

Sure, I meant 1. :)
The BC promise is only about minor versions, so that's a bit off topic, but I don't have a better proposal.
PR welcome on the BC promise then, to be clear we don't promise not hard-breaking strict types.

@nicolas-grekas
Copy link
Member

Closing in favor of #32828
Thank you for raising the point and for the discussion!

nicolas-grekas added a commit that referenced this pull request Jul 31, 2019
This PR was merged into the 3.4 branch.

Discussion
----------

[Form] update type of form $name arguments

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #32821
| License       | MIT
| Doc PR        | -

An alternative to #32821: where a string is expected, passing an int is fine, per PHP casting rules.

Commits
-------

6d4dcad [Form] update type of form $name arguments
@vudaltsov vudaltsov deleted the form-deprecate-ints branch July 31, 2019 15:06
@nicolas-grekas nicolas-grekas modified the milestones: next, 4.4 Oct 27, 2019
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.

5 participants