0
votes

so I have been trying to use middleware with my route resource and having trouble making it work.

Here is my routes setup:

Route::group(['prefix' => 'api','middleware' => 'locationRouteValidator'], function()
{
    Route::resource('location', 'LocationController');
});

and route seems to be setup properly:

php artisan route:list
+--------+----------+------------------------------+----------------------+-------------------------------------------------+------------------------+
| Domain | Method   | URI                          | Name                 | Action                                          | Middleware             |
+--------+----------+------------------------------+----------------------+-------------------------------------------------+------------------------+
|        | GET|HEAD | /                            |                      | Closure                                         |                        |
|        | GET|HEAD | api/location                 | api.location.index   | App\Http\Controllers\LocationController@index   | locationRouteValidator |
|        | POST     | api/location                 | api.location.store   | App\Http\Controllers\LocationController@store   | locationRouteValidator |
|        | GET|HEAD | api/location/create          | api.location.create  | App\Http\Controllers\LocationController@create  | locationRouteValidator |
|        | DELETE   | api/location/{location}      | api.location.destroy | App\Http\Controllers\LocationController@destroy | locationRouteValidator |
|        | PATCH    | api/location/{location}      |                      | App\Http\Controllers\LocationController@update  | locationRouteValidator |
|        | GET|HEAD | api/location/{location}      | api.location.show    | App\Http\Controllers\LocationController@show    | locationRouteValidator |
|        | PUT      | api/location/{location}      | api.location.update  | App\Http\Controllers\LocationController@update  | locationRouteValidator |
|        | GET|HEAD | api/location/{location}/edit | api.location.edit    | App\Http\Controllers\LocationController@edit    | locationRouteValidator |
+--------+----------+------------------------------+----------------------+-------------------------------------------------+------------------------+

so now I create the middleware :

php artisan make:middleware locationRouteValidator

and leave the default code, which is :

public function handle($request, Closure $next)
{
    return $next($request);
}

and just for testing, in my controllers show method, I echo out the passed id like so:

public function show($id)
{
    //
    echo "show ".$id;
}

so now I expect that when I visit /public/api/location/abcd it should display: show abcd or when I visit /public/api/location/1234 it should display show 1234 after which I intended to modify the middleware to allow only numeric values to be passed into {location}.

But If I just run with the default middleware code, the page returns white without displaying anything. I remove the middleware from the route, and it displays the text as expected.

I know I could attach the middleware to the controller instead, but I thought of attaching it in the route instead so that I could write and apply some common middleware by using the route's group feature, which should be possible, right?

Where do you guys think I am going wrong? Thanks in advance for looking!

1
Have you registered the middleware on kernel.php?Arthur Samarcos
that was the problem! I am new to this so missed that step!coderkane

1 Answers

1
votes

Check your \app\http\kernel.php file to see if you have registered the middleware as a route middleware.