【问题标题】:Laravel 5.1 adding middleware to resource routeLaravel 5.1 将中间件添加到资源路由
【发布时间】: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


【解决方案1】:

检查您的 \app\http\kernel.php 文件,看看您是否已将中间件注册为路由中间件。

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 2021-10-15
    • 2016-04-20
    • 1970-01-01
    • 2015-04-28
    • 2016-04-13
    • 1970-01-01
    • 2014-02-18
    • 2020-09-28
    相关资源
    最近更新 更多