หลายแอปพลิเคชัน

บางครั้งโปรเจ็กต์อาจแบ่งออกเป็นหลายโปรเจ็กต์ย่อย เช่น ร้านค้าที่อาจแบ่งออกเป็นโปรเจ็กต์หลักของร้านค้า, 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,
];

แตกต่างจากมิดเดิลแวร์ แต่ละแอปพลิเคชันสามารถตั้งค่าคลาสการจัดการข้อยกเว้นได้เพียงคลาสเดียว

คลาสการจัดการข้อยกเว้นข้างต้นอาจไม่มีอยู่จริง ที่นี่เพียงแค่เป็นตัวอย่างเพื่อแสดงวิธีการตั้งค่าการจัดการข้อยกเว้นตามแอป

การพัฒนาการจัดการข้อยกเว้นดูเพิ่มเติมได้ที่ บทการจัดการข้อยกเว้น