Skip to content
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

[5.4] Bring back an old behaviour in resolving controller method dependencies #18646

Merged
merged 9 commits into from
Apr 6, 2017
Merged

[5.4] Bring back an old behaviour in resolving controller method dependencies #18646

merged 9 commits into from
Apr 6, 2017

Conversation

themsaid
Copy link
Member

@themsaid themsaid commented Apr 4, 2017

This PR will handle the breaking changes reported in #18593 while keeping the fix in #17973

@themsaid themsaid changed the title [5.4] Bring back the old behaviour while fixing the issue [5.4] Bring back an old behaviour in resolving controller method dependencies Apr 4, 2017
@sisve
Copy link
Contributor

sisve commented Apr 4, 2017

Could this include all the unit tests written in #18644 ?

@taylorotwell
Copy link
Member

Yeah it might be nice to add a couple of tests @sisve added to make sure we have it covered.

@themsaid
Copy link
Member Author

themsaid commented Apr 4, 2017

Added tests to cover the cases in the other PR + an integration test to cover the issue that we originally wanted to fix.

@sisve
Copy link
Contributor

sisve commented Apr 4, 2017

While looking at the tests I notice that the one calling withModels has some model binding. The keys (bar, baz) does not match anything. Changing the keys breaks nothing, and removing those two lines to $router->model(...) breaks nothing. Are they required for the test?

This PR fixes all issues I've got regarding the changes in resolveMethodDependencies.

@@ -309,24 +309,6 @@ public function testClassesCanBeInjectedIntoRoutes()
unset($_SERVER['__test.route_inject']);
}

public function testClassesAndVariablesCanBeInjectedIntoRoutes()
Copy link
Member

Choose a reason for hiding this comment

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

Why was this test removed? Makes me a little nervous that perhaps we are breaking something?

Copy link
Member Author

@themsaid themsaid Apr 5, 2017

Choose a reason for hiding this comment

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

To transform a route method dependency we first check if the class already exists in the parameters passed to the route if so then we assume it's a Model so we pass it as is.

The given test contains two type-hinted stdClass arguments, checking for the second stdClass we'll find that it's already in parameters when the first stdClass was resolved, as a result we won't resolve it and we pass the default value instead.

That test used to work before because we were building a brand new array of results instead of mutating the $parameters array, and thus when we check for the second stdClass in $parameters it won't exist since the first resolved one was stored in the $results array not the $parameters array.

For example before this PR you could have function show(Request $request, $id, Request $sameRequest) and you get two arguments with a Request instance, which isn't considered a breaking change because it actually doesn't make sense to resolve the same method dependency twice.

The fix that removed test was supposed to check is now tested here: https://github.com/laravel/framework/pull/18646/files#diff-4480aa925f3c087f5bd9c0603d1eb0fcR439

Copy link
Contributor

Choose a reason for hiding this comment

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

But that test was the only test introduced #17973 that started my issue. What test is now covering the changes in that PR?

Copy link
Member Author

Choose a reason for hiding this comment

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

Copy link
Contributor

Choose a reason for hiding this comment

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

A majority of those tests are just rewritten tests from my PR. They ensure the 5.4.12 behavior, they do not verify the new functionality in 5.4.13. Is it the invocation of withModels that is the new behavior?

'uses' => 'Illuminate\Tests\Routing\RouteTestAnotherControllerWithParameterStub@withModels',
]);
$router->model('bar', 'Illuminate\Tests\Routing\RoutingTestUserModel');
$router->model('baz', 'Illuminate\Tests\Routing\RoutingTestTeamModel');
Copy link
Contributor

Choose a reason for hiding this comment

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

As mentioned in the issue, these two calls to $router->model() seems out of place. The keys seems irrelevant, and the test still works if I remove them. Should they be there?

Copy link
Contributor

@sisve sisve left a comment

Choose a reason for hiding this comment

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

... and I have misclicked and ... started a review? I'm not sure. I'm finishing it and hoping I didn't mess up everything.

@@ -309,24 +309,6 @@ public function testClassesCanBeInjectedIntoRoutes()
unset($_SERVER['__test.route_inject']);
}

public function testClassesAndVariablesCanBeInjectedIntoRoutes()
Copy link
Contributor

Choose a reason for hiding this comment

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

A majority of those tests are just rewritten tests from my PR. They ensure the 5.4.12 behavior, they do not verify the new functionality in 5.4.13. Is it the invocation of withModels that is the new behavior?

@taylorotwell
Copy link
Member

Where are we with this? Do we have the tests we need in place?

@sisve
Copy link
Contributor

sisve commented Apr 5, 2017

There are tests available for the 5.4.12 behavior (the array keys). I do not know what new functionality was introduced in 5.4.13 or what state those tests are in.

@taylorotwell taylorotwell merged commit 6553e33 into laravel:5.4 Apr 6, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants