laravel filter 的原始意义
这是 laravel 4.x 及 5.0 中的概念
https://laravel.com/docs/4.2/routing#route-filters
Route filters provide a convenient way of limiting access to a given route, which is useful for creating areas of your site which require authentication.
filter 与 middleware 的对比
按照 laravel 6 文档的说法,middleware 就是原 4.x 版本 filter 的升级替代品。
Middleware provide a convenient mechanism for filtering HTTP requests entering your application. All of these middleware are located in the app/Http/Middleware directory.
使用方法对比
laravel 6 middleware:
php artisan make:middleware CheckAge
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
laravel 4.x filter:
// 定义在 app/filters.php 文件中
Route::filter('old', function()
{
if (Input::get('age') < 200)
{
return Redirect::to('home');
}
});
// route 中使用
Route::get('user', array('before' => 'old', 'uses' => 'UserController@showProfile'));
before,after 在 filter 与 middleware 中的不同处理方法
filter 是在路由中使用 before 关键字来标识到底是在请求前,还是请求后走 filter 的逻辑。
而 middleware 则是通过代码的插入位置来决定是 before 还是 after request 执行。
// Before: Perform action
$response = $next($request);
// After: Perform action
return $response;
laravel 6 middleware 在 route 中的使用方法
首先在 app/Http/Kernel.php 中注册,例如:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];
然后修改 route 文件:
Route::get('admin/profile', function () {
//
})->middleware('auth'); // 若是多个 middleware: middleware('first', 'second');
web 和 api 则是两个 middleware group,也定义在 kernel.php 中。
是否还需要处理 app/Providers/RouteServiceProvider.php
5.0 升级 5.2 中,有这么段描述:
将过滤器逻辑绑定从 app/filters.php 复制到 app/Providers/RouteServiceProvider.php 的 boot() 方法。并在 app/Providers/RouteServiceProvider.php 添加 use Illuminate\Support\Facades\Route; 来继续使用 Route Facade。那些在路由或控制器内有使用到旧有默认过滤器的 (例如,['before' => 'auth']) 请修改使用新的中间件 (例如,['middleware' => 'auth'])。
看了一遍 lavavel 6 中的 RouteServiceProvider.php 文件,看上去不需要改动。
参考
- middleware 文档 https://laravel.com/docs/6.x/middleware
- route filter 文档 https://laravel.com/docs/4.2/routing#route-filters
- 5.0 升级 5.2 说明 https://learnku.com/docs/laravel/5.2/upgrade/1091#e8bffd
- service provider 的简述 https://sunnyingit.github.io/book/section_php/sericeprovider.html
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式