หลายแอปพลิเคชัน
บางครั้งโปรเจ็กต์อาจแบ่งออกเป็นหลายโปรเจ็กต์ย่อย เช่น ร้านค้าที่อาจแบ่งออกเป็นโปรเจ็กต์หลักของร้านค้า, API ของร้านค้า, และ后台จัดการร้านค้า 3 โปรเจ็กต์ย่อย ซึ่งทั้งหมดใช้การตั้งค่าฐานข้อมูลเดียวกัน
Webman อนุญาตให้คุณวางแผนโครงสร้างไดเรกทอรีแอปได้ดังนี้:
app
├── shop
│ ├── controller
│ ├── model
│ └── view
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
เมื่อเข้าถึงที่อยู่ http://127.0.0.1:8787/shop/{controller}/{method}
จะเข้าถึงตัวควบคุมและวิธีการที่อยู่ใน app/shop/controller
เมื่อเข้าถึงที่อยู่ http://127.0.0.1:8787/api/{controller}/{method}
จะเข้าถึงตัวควบคุมและวิธีการที่อยู่ใน app/api/controller
เมื่อเข้าถึงที่อยู่ http://127.0.0.1:8787/admin/{controller}/{method}
จะเข้าถึงตัวควบคุมและวิธีการที่อยู่ใน app/admin/controller
ใน Webman คุณสามารถวางแผนโครงสร้างไดเรกทอรีแอปได้ดังนี้
app
├── controller
├── model
├── view
│
├── api
│ ├── controller
│ └── model
└── admin
├── controller
├── model
└── view
ดังนั้นเมื่อเข้าถึงที่อยู่ http://127.0.0.1:8787/{controller}/{method}
จะเข้าถึงตัวควบคุมและวิธีการที่อยู่ใน app/controller
เมื่อเส้นทางเริ่มต้นด้วย api หรือ admin จะเข้าถึงตัวควบคุมและวิธีการที่อยู่ในไดเรกทอรีที่เกี่ยวข้อง
ในกรณีที่มีหลายแอป ชื่อพื้นที่ของคลาสต้องเป็นไปตาม psr4
เช่นในไฟล์ app/api/controller/FooController.php
จะมีลักษณะดังนี้:
<?php
namespace app\api\controller;
use support\Request;
class FooController
{
}
การตั้งค่ามิดเดิลแวร์สำหรับหลายแอป
บางครั้งคุณอาจต้องการตั้งค่ามิดเดิลแวร์ที่แตกต่างกันสำหรับแอปพลิเคชันที่แตกต่างกัน ตัวอย่างเช่น แอป api
อาจต้องการมิดเดิลแวร์สำหรับการข้ามโดเมน และ admin
ต้องการมิดเดิลแวร์เพื่อตรวจสอบการเข้าสู่ระบบของผู้ดูแล ระบบการตั้งค่าที่ไฟล์ config/middleware.php
อาจมีลักษณะดังนี้:
return [
// มิดเดิลแวร์ทั่วโลก
'' => [
support\middleware\AuthCheck::class,
],
// มิดเดิลแวร์สำหรับแอป api
'api' => [
support\middleware\AccessControl::class,
],
// มิดเดิลแวร์สำหรับแอป admin
'admin' => [
support\middleware\AdminAuthCheck::class,
support\middleware\SomeOtherClass::class,
],
];
มิดเดิลแวร์ข้างต้นอาจไม่มีอยู่จริง ที่นี่เพียงแค่เป็นตัวอย่างเพื่อแสดงวิธีการตั้งค่ามิดเดิลแวร์ตามแอป
ลำดับการดำเนินการของมิดเดิลแวร์คือ มิดเดิลแวร์ทั่วโลก
->มิดเดิลแวร์ของแอป
การพัฒนามิดเดิลแวร์ดูเพิ่มเติมได้ที่ บทที่มิดเดิลแวร์
การตั้งค่าการจัดการข้อยกเว้นสำหรับหลายแอป
ในลักษณะเดียวกัน คุณอาจต้องการตั้งค่าคลาสการจัดการข้อยกเว้นที่แตกต่างกันสำหรับแต่ละแอปพลิเคชัน ตัวอย่างเช่น หากเกิดข้อยกเว้นในแอป shop
คุณอาจต้องการแสดงหน้าแจ้งเตือนที่เป็นมิตร; ในขณะที่หากเกิดข้อยกเว้นในแอป api
คุณอาจไม่ต้องการหน้าเว็บ แต่เป็นสตริง JSON การตั้งค่าคลาสการจัดการข้อยกเว้นสำหรับแอปที่แตกต่างกันในไฟล์ config/exception.php
อาจมีลักษณะดังนี้:
return [
'shop' => support\exception\Handler::class,
'api' => support\exception\ApiHandler::class,
];
แตกต่างจากมิดเดิลแวร์ แต่ละแอปพลิเคชันสามารถตั้งค่าคลาสการจัดการข้อยกเว้นได้เพียงคลาสเดียว
คลาสการจัดการข้อยกเว้นข้างต้นอาจไม่มีอยู่จริง ที่นี่เพียงแค่เป็นตัวอย่างเพื่อแสดงวิธีการตั้งค่าการจัดการข้อยกเว้นตามแอป
การพัฒนาการจัดการข้อยกเว้นดูเพิ่มเติมได้ที่ บทการจัดการข้อยกเว้น