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
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/Symfony/Component/HttpFoundation/Request.php
Original file line number Diff line number Diff line change
Expand Up @@ -1447,14 +1447,11 @@ public function isMethod($method)
*
* @see https://tools.ietf.org/html/rfc7231#section-4.2.1
*
* @param bool $andCacheable Adds the additional condition that the method should be cacheable. True by default.
*
* @return bool
*/
public function isMethodSafe(/* $andCacheable = true */)
public function isMethodSafe()
{
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.

if (\func_num_args() > 0 && func_get_arg(0)) {
throw new \BadMethodCallException('Checking only for cacheable HTTP methods with Symfony\Component\HttpFoundation\Request::isMethodSafe() is not supported.');
}

Expand Down
2 changes: 1 addition & 1 deletion src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2132,7 +2132,7 @@ public function testMethodSafeChecksCacheable()
$this->expectException('BadMethodCallException');
$request = new Request();
$request->setMethod('OPTIONS');
$request->isMethodSafe();
$request->isMethodSafe(true);
}

/**
Expand Down