【发布时间】:2015-09-04 04:48:35
【问题描述】:
所以我一直在尝试将中间件与我的路由资源一起使用,但无法使其正常工作。
这是我的路线设置:
Route::group(['prefix' => 'api','middleware' => 'locationRouteValidator'], function()
{
Route::resource('location', 'LocationController');
});
并且路线似乎设置正确:
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 |
+--------+----------+------------------------------+----------------------+-------------------------------------------------+------------------------+
所以现在我创建中间件:
php artisan make:middleware locationRouteValidator
并保留默认代码,即:
public function handle($request, Closure $next)
{
return $next($request);
}
只是为了测试,在我的控制器显示方法中,我像这样回显传递的 id:
public function show($id)
{
//
echo "show ".$id;
}
所以现在我希望当我访问/public/api/location/abcd 时它应该显示:
show abcd 或当我访问/public/api/location/1234 时,它应该显示show 1234,之后我打算修改中间件,只允许将数值传递给{location}。
但是如果我只是使用默认的中间件代码运行,页面会返回白色而不显示任何内容。我从路由中删除了中间件,它按预期显示了文本。
我知道我可以将中间件附加到控制器上,但我想将它附加到路由中,以便我可以使用路由的组功能编写和应用一些常见的中间件,这应该是可能的,对吧?
你们觉得我哪里错了?提前感谢您的关注!
【问题讨论】:
-
你在kernel.php上注册中间件了吗?
-
这就是问题所在!我是新手,所以错过了这一步!
标签: php laravel-5.1