Create a Middleware in Laravel 10. using save log , when clien request to website

Chúng ta có thể tạo một Middleware in Laravel 10. Dùng để check các request của client khi vào website. Thật thú vị và bổ ích khi bạn làm điều đó, bạn có thể lưu lại log của người dùng và các thao tác của họ

# Tạo Middleware

hoacode@HOACODEs-MacBook-Pro laravel-10 % ./vendor/bin/sail php artisan make:middleware LogsMiddleware
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Str;
class LogsMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */

     public function handle(Request $request, Closure $next): Response
    {
        $requestId = (string) Str::uuid();

        // data log
        $requestData = [
            'host' => $request->host(),
            'request_id' => $requestId,
            'token'=> $request->bearerToken(),
            'url' => $request->fullUrl(),
            'method' => $request->method(),
            'ip' => $request->ip(),
            'body' => json_encode($request->all()),
            'contentTypes'=> $request->getAcceptableContentTypes(),
            'referer' => $request->headers->get('referer')??'null'
        ];

        //dd($requestData);
        // Web can save data logs here
        \App\Models\Log::create($requestData);

        $response = $next($request);

        $response->headers->set('Request-Id', $requestId);

        return $response;
    }

}

# Tạo Models in Laravel

hoacode@HOACODEs-MacBook-Pro laravel-10 % ./vendor/bin/sail php artisan make:Log -m       

Chạy lệnh trên ta sẽ được một tệp Log trong thư mục App\Models và -m sẽ tạo cho ta một file migration trong thư mục databases\migrations ta hãy mở lên và viết các thuộc tính cột cho nó thôi

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Log extends Model
{
    use HasFactory;

    protected $fillable = [
        'request_id',
        'url',
        'method',
        'ip',
        'body',
        'referer',
    ];
}

# Chỉnh sửa Mirgation 

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('logs', function (Blueprint $table) {
            $table->id();
            $table->string('request_id');
            $table->string('url');
            $table->string('method');
            $table->string('ip');
            $table->string('body');
            $table->string('referer');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('logs');
    }
};

# Chạy lệnh Artisan

hoacode@HOACODEs-MacBook-Pro laravel-10 % ./vendor/bin/sail php artisan migrate    

# Khai báo lớp Middleware 

Mở App\Http\Kernel.php

 protected $middlewareAliases = [
     ....
    'request-log' => \App\Http\Middleware\LogsMiddleware::class

]

# Dùng Middleware

Ta có thể dụng nó bắt cứ đâu chúng ta muốn, Ví dụ mình dùng nó trong file api.php

Route::controller(App\Http\Controllers\ProductRedisController::class)->prefix('redis')->name('redis.products')->middleware('request-log')->group(function () {
    Route::get('/products', 'index');// redis.products.index
    Route::get('/products/{id}', 'show'); //redis.products.show
    Route::get('/products/create', 'create'); //redis.products.create
    Route::post('/products', 'store'); //redis.products.store
    Route::get('/products/edit/{id}', 'edit');  //redis.products.edit
    Route::put('/products/{id}', 'update'); //redis.products.update
    Route::delete('/products/{id}', 'destroy'); //redis.products.destroy
});

Bài Viết Liên Quan

Messsage

Nếu bạn thích chia sẻ của tôi, đừng quên nhấn nút !ĐĂNG KÝ