[8.x] Adds dynamic middleware set on route declaration #39483
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What?
Based on #39464. Allows dynamically setting middleware in route declarations, including parameters, fluently.
How?
When passing a method that doesn't exist or is not defined as a macro when declaring a route, the router will check if the method name is set as route middleware. If that's the case, it will set is as a middleware for the given route.
It also works on dot notation middleware, like
password.confirm
, with parameters:It will also work when:
Router
facade directly:BC?
Notes
Because it uses
app(Kernel::class)->getRouteMiddleware()
behind the scenes to check if the middleware exists or aBadMethodCallException
should be thrown, some tests must be rewritten to add a container instance.