ซึ่งหมายความว่าเมื่อผู้ใช้ (มุมมอง 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
คุณอาจชอบ:
Coveware by Veeam จะยังคงให้บริการตอบสนองต่อเหตุการณ์การขู่กรรโชกทางไซเบอร์ต่อไป Coveware จะนำเสนอความสามารถในการนิติเวชและการแก้ไข...
การบำรุงรักษาเชิงคาดการณ์กำลังปฏิวัติภาคส่วนน้ำมันและก๊าซ ด้วยแนวทางเชิงรุกและนวัตกรรมในการจัดการโรงงาน...
UK CMA ได้ออกคำเตือนเกี่ยวกับพฤติกรรมของ Big Tech ในตลาดปัญญาประดิษฐ์ ที่นั่น…
พระราชกฤษฎีกา "บ้านสีเขียว" ซึ่งกำหนดโดยสหภาพยุโรปเพื่อปรับปรุงประสิทธิภาพการใช้พลังงานของอาคารได้สรุปกระบวนการทางกฎหมายด้วย...