[10.x] Add can
middleware helper to resource routes and route registrar, improve consistency
#42686
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.
I really enjoy the
can
method added in #39464. So much that I often run into situations where I try to use it but it's not available there (yet).This PR adds the ability to use of
can
in these two constructions:To prevent
can('action')->middleware('mw')
ormiddleware('mw')->can('action')
from overriding each other I changed the behaviour of->middleware()
to merge the middleware stack instead of overriding it:These previously lead to middleware stack
['b']
, but now lead to middleware stack['a', 'b']
and that is why this PR is a breaking change. This new behaviour is consistent with how->middleware('x')
behaves on a route (e.g. when chaining afterRoute::get()
).And one more consistency improvement is that comma-separated arg list can now be used to set multiple middlewares on resources, just like it was already available on
Route::middleware()
andRoute::get()->middleware()
: