📅  最后修改于: 2021-01-05 10:40:24             🧑  作者: Mango
我们还可以在路由文件中将中间件分配给控制器的路由。
有多种将中间件分配给控制器的方法:
在web.php文件中将中间件分配给控制器。
我们可以在web.php文件中将中间件分配给控制器。以下是分配中间件所需的步骤:
步骤1:首先,我们创建一个控制器。在上一主题中,我们已经创建了名为PostController的控制器。
第2步:现在,我们创建要分配给PostController的中间件。我们使用以下命令来创建中间件:
php artisan make:middleware Check
上面的命令创建一个名为Check的中间件。
步骤3:打开在laravelproject / app / http / Middleware目录中创建的Check.php文件。
";
return $next($request);
}
}
步骤4:现在,我们必须在kernel.php文件中添加中间件Check.php的路径。
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'age' => \App\Http\Middleware\CheckAge::class,
'check'=>\App\Http\Middleware\Check::class
];
在上面的代码中,突出显示的语句添加了中间件的路径,即Check 。
步骤5:在web.php文件中添加以下代码,以将中间件分配给PostController 。
Route::get('posts', 'PostController@create')->middleware('check');
上面的代码分配了中间件,即检查到PostController。
步骤6:在网络浏览器中输入URL http:// localhost / laravelproject / public / posts,那么输出将是:
使用Controller构造函数
我们还可以使用控制器构造函数来分配中间件。这样做更加方便,因为它将中间件限制为仅控制器类上的特定方法。
以下是使用Controller构造函数分配中间件所需的步骤:
Route::get('posts', 'PostController@create');
public function __construct()
{
$this->middleware('check')->only('show');
}
上面的代码将中间件分配给仅show()方法。
在PostController中添加以上代码后,postController的结构将如下所示:
middleware(function ($request, $next) {
// ...
// echo "Middleware in Laravel";
return $next($request);
});
public function index(){
//
}
/**
* Show the form for creating a new resource.
* @return \Illuminate\Http\Response
*/
public function create(){
return "this is a create method";
}
/**
* Store a newly created resource in storage.
* @param \Illuminate\Http\Request
$request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
* @param int $id
* @return \Illuminate\HttpResponse
*/
public function show($id)
{
return "id is :". $id;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return
\Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request
$request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}}
输出量
如果我们访问URL http:// localhost / laravelproject / public / posts,则输出为:
上面的输出显示,当我们访问create()方法时,将不执行中间件Check.php文件(中间件)。
如果我们更改web.php文件的代码,则代码为:
Route::get('posts/{id}', 'PostController@show');
输出量
在上述情况下,我们正在访问PostController.php文件的show()方法,因此它也在执行Check.php文件(中间件)。
中间件关闭
控制器还允许您使用中间件闭包来注册路由。它允许应用程序为单个控制器定义中间件,而无需分别定义中间件类。
中间件关闭的语法
$this->middleware(function ($request, $next) {
// ...
return $next($request);
});