📜  Laravel中间件

📅  最后修改于: 2021-01-05 10:35:29             🧑  作者: Mango

Laravel中间件

中间件充当用户和请求之间的层。这意味着,当用户请求服务器时,请求将通过中间件,然后中间件将验证请求是否经过身份验证。如果用户的请求已通过身份验证,则该请求将发送到后端。如果用户请求未通过身份验证,则中间件会将用户重定向到登录屏幕。

除身份验证外,其他中间件可用于执行各种任务。例如,CORS中间件负责将标头添加到所有响应。

Laravel框架包括一些中间件,例如身份验证和CSRF保护,所有这些都位于app / Http / Middleware目录中。

我们可以说中间件是一个http请求过滤器,您可以在其中检查条件。

在中间件中,我们将讨论以下主题:

  • 制作中间件
  • 应用中间件
  • 检查中间件的条件
  • 路由中间件

创建一个中间件

输入命令php artisan make:middleware'中间件名称'

在上面的屏幕中,我们输入命令“ php artisan make:middleware CheckAge ”,其中CheckAge是中间件的名称。上面的窗口显示已成功创建名为“ CheckAge ”的中间件。

要查看是否已创建CheckAge中间件,请转到您的项目。我们的项目名称为laravelproject,因此中间件的路径为: C:\ xampp \ htdocs \ laravelproject \ app \ Http \ Middleware

应用中间件

中间件既可以应用于所有URL,也可以应用于某些特定URL。

让我们将中间件应用于所有URL。

步骤1:打开kernel.php文件。如果我们想将中间件应用于所有URL,则在中间件数组中添加中间件的路径。

 [
            \App\Http\Middleware\EncryptCookies::class,
          
  \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            
\Illuminate\Session\Middleware\StartSession::class,
            
// \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware 
\ShareErrorsFromSession::class,
          
  \App\Http\Middleware\VerifyCsrfToken::class,
            
\Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    
 /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     *  
@var array
     */
    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,
    ];
}

步骤2:在Git Bash窗口中输入php artisan serve命令。

步骤3:打开您已创建为中间件的CheckAge.php文件。

步骤4:现在,输入URL'http:// localhost / laravelproject / public / '。

让我们将中间件应用于某些特定的路由。

步骤1:打开kernel.php文件。如果我们要将中间件应用于某些特定的路由

 [
  \App\Http\Middleware\EncryptCookies::class,
  \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
  \Illuminate\Session\Middleware\StartSession::class,
  // \Illuminate\Session\Middleware\AuthenticateSession::class,
  \Illuminate\View\Middleware \ShareErrorsFromSession::class,
 \App\Http\Middleware\VerifyCsrfToken::class,
 \Illuminate\Routing\Middleware\SubstituteBindings::class,
 ],

 'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];
 /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     *  
@var array
     */
    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 ];
       
}

在上面的代码中,我们添加了代码,即“ age” => \ App \ Http \ Middleware \ CheckAge :: class' ,其中age是中间件的名称。现在,我们可以将“年龄”中间件用于某些特定的路线。

步骤2:打开您已创建为中间件的CheckAge.php文件。

步骤3:在web.php文件中添加中间件代码。

Route::Get('/',function()
{
  return view('welcome');
})-> middleware('age');
Route::Get('user/profile',function()
{
  return "user profile";
});

在上面的代码中,我们在'/'根URL中添加了中间件,而在'user / profile'URL中未添加中间件。

输出:

当我们访问根URL时,输出将是:

上面的输出表明,中间件代码在显示“ hello world”时也已被访问。

当我们访问URL(即/ user / profile)时,输出将是:

上面的输出表明尚未访问中间件代码。

在URL中传递参数时。

web.php

Route::Get('/{age}',function($age)
{
  return view('welcome');
})-> middleware('age');

CheckAge.php

输出量

检查中间件的条件

中间件也可用于检查条件。让我们通过一个例子来理解。

Route::Get('/{age}',function($age)
{
  return view('welcome');
})-> middleware('age');
age>10)
{
echo "Age is greater than 10";
}
else
{
echo"Age is not greater than 10";
}
return $next($request);
    
}}

输出: