多應(yīng)用
有時(shí)一個(gè)項(xiàng)目可能分為多個(gè)子項(xiàng)目,例如一個(gè)商城可能分為商城主項(xiàng)目、商城api接口、商城管理后臺(tái)3個(gè)子項(xiàng)目,他們都使用相同的數(shù)據(jù)庫(kù)配置。
webman允許你這樣規(guī)劃app目錄:
app
├── shop
│?? ├── controller
│?? ├── model
│?? └── view
├── api
│?? ├── controller
│?? └── model
└── admin
├── controller
├── model
└── view
當(dāng)訪問(wèn)地址 http://127.0.0.1:8787/shop/{控制器}/{方法}
時(shí)訪問(wèn)app/shop/controller
下的控制器與方法。
當(dāng)訪問(wèn)地址 http://127.0.0.1:8787/api/{控制器}/{方法}
時(shí)訪問(wèn)app/api/controller
下的控制器與方法。
當(dāng)訪問(wèn)地址 http://127.0.0.1:8787/admin/{控制器}/{方法}
時(shí)訪問(wèn)app/admin/controller
下的控制器與方法。
在webman中,甚至可以這樣規(guī)劃app目錄。
app
├── controller
├── model
├── view
│
├── api
│?? ├── controller
│?? └── model
└── admin
├── controller
├── model
└── view
這樣當(dāng)?shù)刂吩L問(wèn) http://127.0.0.1:8787/{控制器}/{方法}
時(shí)訪問(wèn)的是app/controller
下的控制器與方法。當(dāng)路徑里以api或者admin開(kāi)頭時(shí)訪問(wèn)的是相對(duì)應(yīng)目錄里的控制器與方法。
多應(yīng)用時(shí)類的命名空間需符合psr4
,例如app/api/controller/FooController.php
文件類似如下:
<?php
namespace app\api\controller;
use support\Request;
class FooController
{
}
多應(yīng)用中間件配置
有時(shí)候你想為不同應(yīng)用配置不同的中間件,例如api
應(yīng)用可能需要一個(gè)跨域中間件,admin
需要一個(gè)檢查管理員登錄的中間件,則配置config/midlleware.php
可能類似下面這樣:
return [
// 全局中間件
'' => [
support\middleware\AuthCheck::class,
],
// api應(yīng)用中間件
'api' => [
support\middleware\AccessControl::class,
],
// admin應(yīng)用中間件
'admin' => [
support\middleware\AdminAuthCheck::class,
support\middleware\SomeOtherClass::class,
],
];
以上中間件可能并不存在,這里僅僅是作為示例講述如何按應(yīng)用配置中間件
中間件執(zhí)行順序?yàn)?全局中間件
->應(yīng)用中間件
。
中間件開(kāi)發(fā)參考中間件章節(jié)
多應(yīng)用異常處理配置
同樣的,你想為不同的應(yīng)用配置不同的異常處理類,例如shop
應(yīng)用里出現(xiàn)異常你可能想提供一個(gè)友好的提示頁(yè)面;api
應(yīng)用里出現(xiàn)異常時(shí)你想返回的并不是一個(gè)頁(yè)面,而是一個(gè)json字符串。為不同應(yīng)用配置不同的異常處理類的配置文件config/exception.php
類似如下:
return [
'shop' => support\exception\Handler::class,
'api' => support\exception\ApiHandler::class,
];
不同于中間件,每個(gè)應(yīng)用只能配置一個(gè)異常處理類。
以上異常處理類可能并不存在,這里僅僅是作為示例講述如何按應(yīng)用配置異常處理
異常處理開(kāi)發(fā)參考異常處理章節(jié)