[5.8] Fix Error Message issue for Missing Method with Alternative Route Registering Syntax #28397
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.
This PR was created to resolve issue #27344.
When working through the framework's Routing files it seems that the below
if
statement found here on theparse
method ofRouting/RouteAction.php
, caused a problem when registering a route with the new style added by this PR. For example:Route::get('/test', [App\Http\Controllers\TestController::class, 'index']);
.By passing
true
as the second argument to theis_callable
function (reference to PHP built inis_callable
function and its parameters can be found here), it performs a syntax only check on the$var
that is passed as the first argument.This allows the $action variable that is sent through to the
parse
method to pass the aboveif
statement, which then sets theuses
andcontroller
items in the Route's action array as intended by the original PR.Then when the route's uri is hit in the browser it returns the proper error message, like: "Method App\Http\Controllers\TestController::index does not exist." as opposed to the generic "Function () does not exist", that the original issue report mentioned.
I ran PHPUnit and all of the tests were passing, except the ones that were skipped, see below from my console:
P.S. This is my first PR to the Laravel Framework, apologies if there are any issues.