个性化阅读
专注于IT技术分析

Laravel控制器中间件

我们还可以在路由文件中将中间件分配给控制器的路由。

有多种将中间件分配给控制器的方法:

在web.php文件中将中间件分配给控制器。

我们可以在web.php文件中将中间件分配给控制器。以下是分配中间件所需的步骤:

步骤1:首先, 我们创建一个控制器。在上一主题中, 我们已经创建了名为PostController的控制器。

步骤2:现在, 我们创建要分配给PostController的中间件。我们使用以下命令来创建中间件:

php artisan make:middleware Check

上面的命令创建一个名为Check的中间件。

Laravel控制器中间件

步骤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, 那么输出将是:

Laravel控制器中间件

使用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.
     * @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, 则输出为:

Laravel控制器中间件

上面的输出显示, 当我们访问create()方法时, 将不执行中间件Check.php文件(中间件)。

如果我们更改web.php文件的代码, 则代码为:

Route::get('posts/{id}', 'PostController@show');

输出量

Laravel控制器中间件

在上述情况下, 我们正在访问PostController.php文件的show()方法, 因此它也在执行Check.php文件(中间件)。

中间件关闭

控制器还允许你使用中间件闭包来注册路由。它允许应用程序为单个控制器定义中间件, 而无需分别定义中间件类。

中间件关闭的语法

$this->middleware(function ($request, $next) {
    // ...
  return $next($request);
});

赞(0)
未经允许不得转载:srcmini » Laravel控制器中间件

评论 抢沙发

评论前必须登录!