我们还可以在路由文件中将中间件分配给控制器的路由。
有多种将中间件分配给控制器的方法:
在web.php文件中将中间件分配给控制器。
我们可以在web.php文件中将中间件分配给控制器。以下是分配中间件所需的步骤:
步骤1:首先, 我们创建一个控制器。在上一主题中, 我们已经创建了名为PostController的控制器。
步骤2:现在, 我们创建要分配给PostController的中间件。我们使用以下命令来创建中间件:
php artisan make:middleware Check
上面的命令创建一个名为Check的中间件。
文章图片
步骤3:打开在laravelproject / app / http / Middleware目录中创建的Check.php文件。
<
?php
namespace App\Http\Middleware;
use Closure;
class Check
{
/**
* Handle an incoming request.
* @param\Illuminate\Http\Request$request
@param\Closure$next
* @return mixed
*/
public function handle($request, Closure $next)
{
echo "Middleware in Laravel <
br>
<
br>
";
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:在Web浏览器中输入URL http:// localhost / laravelproject / public / posts, 那么输出将是:
文章图片
使用Controller构造函数
我们还可以使用控制器构造函数来分配中间件。这样做更加方便, 因为它将中间件限制为仅控制器类上的特定方法。
以下是使用Controller构造函数分配中间件所需的步骤:
- 请按照上一种情况的步骤1到步骤4进行操作。
- 在web.php文件中添加以下代码:
Route::get('posts', 'PostController@create');
- 打开PostController.php文件。如果要将中间件分配给PostController的show()方法;然后, 我们需要在PostController.php文件中添加以下代码。
public function __construct()
{
$this->
middleware('check')->
only('show');
}
上面的代码将中间件分配给仅show()方法。
在PostController中添加以上代码后, postController的结构如下所示:
<
?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Display a listing of the resource.
* @return \Illuminate\Http\Response
*/$this->
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.
* @paramint$id
* @return \Illuminate\HttpResponse
*/public function show($id)
{
return "id is :". $id;
}
/**
* Show the form for editing the specified resource.
*
* @paramint$id
* @return
\Illuminate\Http\Response
*/public function edit($id){//}/**
* Update the specified resource in storage.
*
* @param\Illuminate\Http\Request
$request
* @paramint$id
* @return \Illuminate\Http\Response
*/public function update(Request $request, $id){//}/**
* Remove the specified resource from storage.
* @paramint$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文件(中间件)。
中间件关闭
控制器还允许你使用中间件闭包来注册路由。它允许应用程序为单个控制器定义中间件, 而无需分别定义中间件类。
【Laravel控制器中间件】中间件关闭的语法
$this->
middleware(function ($request, $next) {
// ...
return $next($request);
});
推荐阅读
- 什么是控制器()
- Laravel Composer安装详细教程
- 创建第一个Laravel项目详细步骤
- Laravel基本路由
- Laravel应用程序结构解释
- Laravel教程介绍
- Laravel的历史
- Laravel的特点