บทความ

มิดเดิลแวร์ Laravel ทำงานอย่างไร

มิดเดิลแวร์ Laravel เป็นเลเยอร์แอปพลิเคชันระดับกลางที่แทรกแซงระหว่างคำขอของผู้ใช้และการตอบสนองของแอปพลิเคชัน

ซึ่งหมายความว่าเมื่อผู้ใช้ (มุมมอง Laravel) ส่งคำขอไปยังเซิร์ฟเวอร์ (ตัวควบคุม Laravel) คำขอจะผ่านมิดเดิลแวร์ วิธีนี้มิดเดิลแวร์สามารถตรวจสอบได้ว่าคำขอนั้นได้รับการรับรองความถูกต้องหรือไม่: 

  • หากคำขอของผู้ใช้ได้รับการรับรองความถูกต้อง คำขอจะถูกส่งไปยังแบ็กเอนด์
  • หากคำขอของผู้ใช้ไม่ผ่านการรับรองความถูกต้อง มิดเดิลแวร์จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าจอเข้าสู่ระบบ

Laravel ช่วยให้คุณ defiเสร็จสิ้นและใช้มิดเดิลแวร์เพิ่มเติมเพื่อทำงานต่างๆ ยกเว้นการตรวจสอบสิทธิ์ 

มิดเดิลแวร์ของ Laravel เช่น การพิสูจน์ตัวตนและการป้องกัน CSRF จะอยู่ในไดเร็กทอรี แอพ/Http/มิดเดิลแวร์ .

ดังนั้นเราจึงสามารถพูดได้ว่ามิดเดิลแวร์เป็นตัวกรองคำขอ http ซึ่งสามารถตรวจสอบเงื่อนไขและดำเนินการได้

การสร้างมิดเดิลแวร์

ในการสร้างมิดเดิลแวร์ใหม่ เราเรียกใช้คำสั่งต่อไปนี้:

php artisan make:middleware <name-of-middleware>

เราสร้าง middleware และเราเรียกมันว่า CheckAge, artisan จะตอบเราดังนี้

หน้าต่างด้านบนแสดงว่ามิดเดิลแวร์สร้างสำเร็จด้วยชื่อ ” ตรวจสอบอายุ "

หากต้องการดูว่ามิดเดิลแวร์ของ CheckAge ถูกสร้างขึ้นหรือไม่ ให้ไปที่โปรเจ็กต์ในโฟลเดอร์ app/Http/Middleware และคุณจะเห็นไฟล์ที่สร้างขึ้นใหม่

ไฟล์ที่สร้างขึ้นใหม่มีรหัสดังต่อไปนี้

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

ใช้มิดเดิลแวร์

หากต้องการใช้มิดเดิลแวร์ เราจำเป็นต้องลงทะเบียน

มีมิดเดิลแวร์สองประเภทใน Laravel:

  • Middleware globale
  • Route Middleware

Il มิดเดิลแวร์ทั่วโลก จะถูกดำเนินการในทุกคำขอ HTTP จากแอปพลิเคชัน ในขณะที่ เส้นทางมิดเดิลแวร์ จะถูกกำหนดให้เป็นเส้นทางเฉพาะ สามารถลงทะเบียนมิดเดิลแวร์ได้ที่ แอพ/Http/Kernel.php. ไฟล์นี้มีคุณสมบัติสองอย่าง $มิดเดิลแวร์ e $routeMiddleware . คุณสมบัติ $middleware ใช้เพื่อลงทะเบียนมิดเดิลแวร์ส่วนกลางและความเป็นเจ้าของ $routeMiddleware ใช้เพื่อลงทะเบียนมิดเดิลแวร์เฉพาะเส้นทาง

หากต้องการลงทะเบียนมิดเดิลแวร์ส่วนกลาง ให้ระบุคลาสที่ส่วนท้ายของคุณสมบัติ $middleware

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

ในการลงทะเบียนมิดเดิลแวร์เฉพาะเส้นทาง ให้เพิ่มคีย์และค่าให้กับคุณสมบัติ $routeMiddleware

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

เราสร้าง ตรวจสอบอายุ ในตัวอย่างก่อนหน้านี้ ขณะนี้เราสามารถลงทะเบียนสิ่งนี้ในคุณสมบัติเส้นทางมิดเดิลแวร์ รหัสสำหรับการลงทะเบียนดังกล่าวแสดงไว้ด้านล่าง

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

พารามิเตอร์มิดเดิลแวร์

เรายังสามารถส่งผ่านพารามิเตอร์ด้วยมิดเดิลแวร์ 

ตัวอย่างเช่น หากแอปพลิเคชันของคุณมีบทบาทต่างๆ เช่น ผู้ใช้ ผู้ดูแลระบบ ผู้ดูแลระบบขั้นสูง เป็นต้น และคุณต้องการยืนยันการกระทำตามบทบาท คุณสามารถทำได้โดยส่งพารามิเตอร์ด้วยมิดเดิลแวร์ 

มิดเดิลแวร์ที่เราสร้างขึ้นมีฟังก์ชันต่อไปนี้ และเราสามารถส่งอาร์กิวเมนต์แบบกำหนดเองหลังอาร์กิวเมนต์ได้ $ ถัดไป .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

ตอนนี้ลองตั้งค่าพารามิเตอร์บทบาทเป็นมิดเดิลแวร์ใหม่ที่เรากำลังจะสร้างขึ้นตั้งแต่ต้น จากนั้นดำเนินการสร้าง Role Middleware โดยเรียกใช้คำสั่งต่อไปนี้

แก้ไขวิธีจัดการดังนี้

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

เราเพิ่มพารามิเตอร์ $roleและภายในบรรทัดวิธีการ echo เพื่อเขียนเอาต์พุตชื่อบทบาท

จดหมายข่าวนวัตกรรม
อย่าพลาดข่าวสารที่สำคัญที่สุดเกี่ยวกับนวัตกรรม ลงทะเบียนเพื่อรับพวกเขาทางอีเมล

ตอนนี้มาลงทะเบียนมิดเดิลแวร์ RoleMiddleware สำหรับเส้นทางเฉพาะ

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

ตอนนี้เพื่อทดสอบมิดเดิลแวร์ด้วยพารามิเตอร์ เราจำเป็นต้องสร้างคำขอและการตอบกลับ เพื่อจำลองการตอบสนอง มาสร้างคอนโทรลเลอร์ที่เราจะเรียกว่า TestController

php artisan make:controller TestController --plain

คำสั่งที่เพิ่งดำเนินการจะสร้างตัวควบคุมใหม่ภายในโฟลเดอร์ app/Http/TestController.phpและเปลี่ยนวิธีการ index กับสาย echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

หลังจากตั้งค่าการตอบกลับแล้ว เราสร้างคำขอโดยแก้ไขไฟล์ routes.phpโดยการเพิ่ม route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

ณ จุดนี้เราสามารถลองตัวอย่างได้โดยไปที่ URL http://localhost:8000/role

และในเบราว์เซอร์เราจะเห็นทั้งสอง echo

Role editor
Test Controller

มิดเดิลแวร์ที่ยุติได้

Il terminable Middleware ดำเนินการบางอย่างหลังจากส่งการตอบกลับไปยังเบราว์เซอร์ สามารถทำได้โดยการสร้างมิดเดิลแวร์ด้วยเมธอด สิ้นสุดในมิดเดิลแวร์ Il terminable Middleware จะต้องลงทะเบียนกับ middleware ทั่วโลก. วิธีการ terminate จะได้รับสองข้อโต้แย้ง ขอ $ e $ตอบสนอง 

วิธีการ Terminate จะต้องสร้างดังที่แสดงในโค้ดต่อไปนี้

php artisan make:middleware TerminateMiddleware

เมื่อสร้างมิดเดิลแวร์แล้ว app/Http/Middleware/TerminateMiddleware.php ให้แก้ไขโค้ดดังนี้

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

ในกรณีนี้เรามีวิธี handle และวิธีการ terminate ด้วยสองพารามิเตอร์ $request e $response.

ตอนนี้เรามาลงทะเบียนมิดเดิลแวร์กัน

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

ตอนนี้เราต้องสร้างตัวควบคุมเพื่อจำลองการตอบสนอง

php artisan make:controller XYZController --plain

การปรับเปลี่ยนเนื้อหาของชั้นเรียน

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

ตอนนี้เราต้องแก้ไขไฟล์ routes/web.php เพิ่มเส้นทางที่จำเป็นเพื่อเปิดใช้งานคำขอ

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

ณ จุดนี้เราสามารถลองตัวอย่างได้โดยไปที่ URL http://localhost:8000/terminate

และในเบราว์เซอร์เราจะเห็นบรรทัดต่อไปนี้

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

คุณอาจชอบ:

จดหมายข่าวนวัตกรรม
อย่าพลาดข่าวสารที่สำคัญที่สุดเกี่ยวกับนวัตกรรม ลงทะเบียนเพื่อรับพวกเขาทางอีเมล

บทความล่าสุด

Veeam มีการสนับสนุนแรนซัมแวร์ที่ครอบคลุมที่สุด ตั้งแต่การป้องกันไปจนถึงการตอบสนองและการกู้คืน

Coveware by Veeam จะยังคงให้บริการตอบสนองต่อเหตุการณ์การขู่กรรโชกทางไซเบอร์ต่อไป Coveware จะนำเสนอความสามารถในการนิติเวชและการแก้ไข...

23 2024 เมษายน

การปฏิวัติสีเขียวและดิจิทัล: การบำรุงรักษาเชิงคาดการณ์กำลังเปลี่ยนแปลงอุตสาหกรรมน้ำมันและก๊าซอย่างไร

การบำรุงรักษาเชิงคาดการณ์กำลังปฏิวัติภาคส่วนน้ำมันและก๊าซ ด้วยแนวทางเชิงรุกและนวัตกรรมในการจัดการโรงงาน...

22 2024 เมษายน

หน่วยงานกำกับดูแลการต่อต้านการผูกขาดของสหราชอาณาจักรส่งสัญญาณเตือน BigTech เกี่ยวกับ GenAI

UK CMA ได้ออกคำเตือนเกี่ยวกับพฤติกรรมของ Big Tech ในตลาดปัญญาประดิษฐ์ ที่นั่น…

18 2024 เมษายน

Casa Green: การปฏิวัติพลังงานเพื่ออนาคตที่ยั่งยืนในอิตาลี

พระราชกฤษฎีกา "บ้านสีเขียว" ซึ่งกำหนดโดยสหภาพยุโรปเพื่อปรับปรุงประสิทธิภาพการใช้พลังงานของอาคารได้สรุปกระบวนการทางกฎหมายด้วย...

18 2024 เมษายน

อ่านนวัตกรรมในภาษาของคุณ

จดหมายข่าวนวัตกรรม
อย่าพลาดข่าวสารที่สำคัญที่สุดเกี่ยวกับนวัตกรรม ลงทะเบียนเพื่อรับพวกเขาทางอีเมล

ติดตามเรา