我正在学习laravel,现在我陷入了中间件的困境。我有上课AdultMiddleware.php:
<?php
namespace App\Http\Middleware;
use Closure;
class AdultMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Session::get('age') < 18) {
return view('search');
}
return $next($request);
}
}
它是Kernel.php中的简称:
protected $routeMiddleware = [
'adult' => \App\Http\Middleware\AdultMiddleware::class,
];
在web.php中:
Route::get('middle', array('as' => 'middle', 'age' => '16', 'before' => 'adult', function()
{
return view('welcome');
}));
正如您在路线中看到的那样,我将年龄定为16,但仍然会返回欢迎而不是搜索。我做错了什么?我知道这可能听起来像新手,但我确实尝试谷歌,没有运气。这就是我在这里问的原因。
答案 0 :(得分:2)
将中间件分配给路线:
Route::get(..., ['middleware' => 'adult', ...]);
Route::get(..., ...)->middleware('adult');
before
适用于Laravel中不再存在的过滤器,因为中间件替换了过滤器。
Route::get('middle', ['as' => 'middle', 'middleware' => 'adult', function () {
return view('welcome');
}]);
Laravel Docs - 5.2 - Middleware - Assigning Middleware to routes
Laravel Docs - 5.5 - Middleware - Assigning Middleware to routes
如果您的中间件要检查会话变量,您可以添加路由以便能够根据需要设置该会话变量。
Route::get('set/age/{age}', function ($age) {
session(['age' => $age]);
return redirect()->route('middle');
});
这会在会话中设置age
变量,并将您重定向到“中间”路线。
此外,您可能希望将重定向返回到搜索页面,而不是从中间件返回视图。