学习Laravel中的中间件

103 阅读2分钟

安装Laravel

  1. getcomposer.org/download/下载并安装最新版本的Composer.

  2. Visual Studio Code中打开Windows终端,用下面的命令安装Laravel安装程序

    composer global require laravel/installer
    
  3. 创建新的文件夹,命名为LearnLaravelWithRealApps.使用Visual Studio Code打开LearnLaravelWithRealApps文件夹.在这个文件夹中,创建新的项目,名为LearnLaravelWithRealApps,命令如下。

    laravel new LearnLaravelWithRealApps
    

  4. 运行LearnLaravelWithRealApps项目,命令如下。

    php artisan serve
    
  5. 打开LearnLaravelWithRealApps项目,网址如下。

    http://localhost:8000
    

    (adsbygoogle = window.adsbygoogle || []).push({});

创建控制器

app/Http/Controllers文件夹下创建名为DemoController.php的新PHP文件,如下所示。

<?php

namespace App\Http\Controllers;

class DemoController extends Controller
{
    public function index()
    {
        return view('demo/index');
    }

    public function index2()
    {
        return view('demo/index2');
    }

    public function index3()
    {
        return view('demo/index3');
    }
}

创建视图

resources/views文件夹下创建名为demo的新文件夹。在这个文件夹中,创建新的Blade文件,如下所示。

索引视图

resources/views/demo文件夹中,创建名为index.blade.php的新Blade文件,如下所示。

<html>

    <head>
        <title>Laravel</title>
    </head>

    <body>
        
        <h3>Index</h3>

    </body>

</html>

索引 2 视图

resources/views/demo文件夹中,创建名为index2.blade.php的新Blade文件,如下所示。

<html>

    <head>
        <title>Laravel</title>
    </head>

    <body>

        <h3>Index 2</h3>

    </body>

</html>

索引3视图

resources/views/demo文件夹中,创建名为index3.blade.php的新Blade文件,如下所示。

<html>

    <head>
        <title>Laravel</title>
    </head>

    <body>

        <h3>Index 3</h3>

    </body>

</html>

创建中间文件

使用下面的命令行来创建新的中间件。

php artisan make:middleware YourMiddleware

Log1中间件

使用php artisan make:middleware Log1Middleware命令行创建Log1Middleware,如下。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Log1Middleware
{    
    public function handle(Request $request, Closure $next)
    {
        echo '<br>date: '.date('d/m/Y H:i:s');
        return $next($request);
    }
}

Log2中间件

使用php artisan make:middleware Log2Middleware命令行来创建Log2Middleware,如下所示。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;

class Log2Middleware
{    
    public function handle(Request $request, Closure $next)
    {
        echo '<br>'.URL::current();
        return $next($request);
    }
}

Log3中间件

使用php artisan make:middleware Log3Middleware命令行来创建Log3Middleware,如下所示。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Log3Middleware
{    
    public function handle(Request $request, Closure $next)
    {
        echo '<br>ip: '.$request->ip();
        return $next($request);
    }
}

Log4中间件

使用php artisan make:middleware Log4Middleware命令行来创建Log4Middleware,如下所示。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Log4Middleware
{    
    public function handle(Request $request, Closure $next)
    {
        echo '<br>path: '.$request->path();
        return $next($request);
    }
}

向内核声明中间件

打开App\Http\Kernel.php文件,向**$routeMiddleware**声明新的中间件,如下所示。

protected $routeMiddleware = [
    'log1Middleware' => \App\Http\Middleware\Log1Middleware::class,
    'log2Middleware' => \App\Http\Middleware\Log2Middleware::class,
    'log3Middleware' => \App\Http\Middleware\Log3Middleware::class,
    'log4Middleware' => \App\Http\Middleware\Log4Middleware::class,
];

创建路由

打开路由文件夹中的web.php文件,添加新的路由,如下所示。

<?php
				
use App\Http\Controllers\DemoController;
use Illuminate\Support\Facades\Route;

Route::group(['prefix' => 'demo', 'middleware' => ['log1Middleware', 'log2Middleware', 'log3Middleware']], function () {

    Route::get('/', [DemoController::class, 'index']);

    Route::get('/index', [DemoController::class, 'index'])->middleware(['log4Middleware']);

    Route::get('/index2', [DemoController::class, 'index2'])->withoutMiddleware(['log2Middleware', 'log3Middleware']);

    Route::group(['prefix' => 'index3', 'excluded_middleware' => ['log1Middleware', 'log2Middleware']], function () {
        Route::get('/', [DemoController::class, 'index3']);
    });
    
});

Laravel项目的结构