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

Skip to content

[HttpFoundation] Allow to not pass a parameter to Request::isMethodSafe() #34167

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

Merged
merged 1 commit into from
Oct 29, 2019

Conversation

dunglas
Copy link
Member

@dunglas dunglas commented Oct 29, 2019

Q A
Branch? 4.3
Bug fix? yes
New feature? no
Deprecations? no
Tickets n/a
License MIT
Doc PR n/a

This parameter was already deprecated in Symfony 4. Allowing to not pass it in Symfony 4.3 without triggering a deprecation allows to support both HttpFoundation 4.3 and 4.4, otherwise it's not possible.

Needed to make API Platform compatible with Symfony 5 (api-platform/core#3009)

@nicolas-grekas nicolas-grekas force-pushed the fix-isMethodSafe-upgrade-path branch from 90e4345 to e819256 Compare October 29, 2019 13:51
@nicolas-grekas
Copy link
Member

Thank you @dunglas.

nicolas-grekas added a commit that referenced this pull request Oct 29, 2019
…:isMethodSafe() (dunglas)

This PR was squashed before being merged into the 4.3 branch.

Discussion
----------

[HttpFoundation] Allow to not pass a parameter to Request::isMethodSafe()

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a
| License       | MIT
| Doc PR        | n/a

This parameter was already deprecated in Symfony 4. Allowing to not pass it in Symfony 4.3 without triggering a deprecation allows to support both HttpFoundation 4.3 and 4.4, otherwise it's not possible.

Needed to make API Platform compatible with Symfony 5 (api-platform/core#3009)

Commits
-------

e819256 [HttpFoundation] Allow to not pass a parameter to Request::isMethodSafe()
@nicolas-grekas nicolas-grekas merged commit e819256 into symfony:4.3 Oct 29, 2019
@dunglas dunglas deleted the fix-isMethodSafe-upgrade-path branch October 29, 2019 13:52
{
if (!\func_num_args() || func_get_arg(0)) {
// setting $andCacheable to false should be deprecated in 4.1
Copy link
Contributor

Choose a reason for hiding this comment

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

I guess this did not happen? πŸ™ˆ

Copy link
Contributor

Choose a reason for hiding this comment

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

Actually, shouldn't we trigger a deprecation here, if an argument is passed? This is according to the original plan: #20603 (comment)

Copy link
Contributor

Choose a reason for hiding this comment

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

Sorry, I see it's already done in 4.4: #31658

Copy link
Contributor

@teohhanhui teohhanhui Oct 29, 2019

Choose a reason for hiding this comment

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

This change seems dangerous actually. Consider this scenario:

Safer alternative: In API Platform (and other bundles which need to support both Symfony 4.3 and Symfony 4.4 without triggering a deprecation), I think we should do version detection and make the call accordingly.

Copy link
Member

Choose a reason for hiding this comment

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

This upgrade path is not supported - one must go through 3.4 and fix deprecations. We don't support another path.

Copy link
Contributor

@teohhanhui teohhanhui Oct 30, 2019

Choose a reason for hiding this comment

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

I'm trying to understand the rationale behind the double deprecation strategy, i.e.:

  1. Deprecate not passing the $andCacheable argument with false value in 3.2.
  2. Throwing an error when not passing the $andCacheable argument with false value in 4.0.
  3. Deprecate passing the $andCacheable argument in 4.14.4.

It seems to me like it's meant to prevent having unexpected behaviour when the deprecation is not caught during the upgrade process (and this can and does happen - it's impossible to catch all deprecations). And this PR seems to break the safety net afforded by this strategy.

But then again I might be overthinking this, and the double deprecation might just be out of necessity.

Copy link
Member

Choose a reason for hiding this comment

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

The reasoning is that the deprecation is triggered in 3.4. So we can assume in 4.x that it's been taken into account.

@fabpot fabpot mentioned this pull request Nov 1, 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.

4 participants