了解TP框架的中間件和路由配置


PHP的TP框架先不說安全或性能怎么樣,那功能方面確實也比較強大,而且相對其它框架的門檻要低好多,做一些私活項目,那簡直是神器呀,最近做一個小活,用到了這個框架,也是看了一下手冊就邊做邊學了。

在開發中用到了中間件、注入和依賴、門面模式等,這篇文章簡單說下在開發中學到的一點小東西,權當一個自已的學習記錄吧。

先說說中間件,這東西也不是啥多么新鮮和高級的玩樣,在很多框架中都有類似實現的方式,像YII的行為和攔截器什么的,也都是差不多的作用。我覺得更多的是將業務和一些邏輯做了解耦分離,使整個業務更清楚,讓你不會在一個地方寫一大堆代碼。

比如你要控制寫日志、權限認證、來源判斷、白名單、返回Json等你都可以寫在不同的中間件里面,避免了將這些代碼寫到一個地方去判斷,也可以重復利用代碼,所以說,適當用上中間件來寫,還是挺爽的。

在TP中,有好幾種不同類型的中間件,像全局中間件、應用中間件、路由中間件、控制器中間件,它們之間的執行順序也是按上面的來的。

全局中間件

app/middleware.php定義的中間件

return [
    // Session初始化
     \think\middleware\SessionInit::class
];

應用中間件

這個是在應用下面定義的,如我的app目錄下面有 api,admin應用,那么在 app/api/middleware.php定義

return [
    \app\api\middleware\Log::class
];

路由中間件

就是在注冊路由時,可以注冊中間件,執行這個路由時,執行相對應的中間件。

 Route::post('create-order','app\\api\\controller\\order\OrderPay@createOrder')->middleware(app\\middleware\Auth::class);

控制器中間件

在控制器中定義$middleware屬性,如示例,當訪問index控制時,就會執行中間件



class Index extends FrontController
{

    protected $middleware = [   \app\admin\middleware\CheckAdmin::class];
    
    public function index()
    {
        echo 'test';
    }
}

路由

這東西很不錯呀,可以靈活控制你的URL地址顯示,不過是隱藏真實地址,美化地址都能輕易實現,比如我現在這個項目,因為要兼容以前的地址,到時候遷移的時候只想要改域名就行了,所以需要把路徑搞成一樣的。

它以前的項目是用.NET寫的,里面的URL有v1,v2這種,這種東西在Net中很簡單,就配置一個注解就行了。

沒想到,這個在TP中也是很容易實現的。通過配置路由就行了。

配置路由

一 TP的路由文件可以配置在/route/[應用]/app.phpapp/[應用]/app.php等,如果在應用中配置了,那么 /route下面就不會執行了。

/route/api/app.php配置路由定義

use think\facade\Route;

Route::group('hpay',function(){
    Route::post('create-order','app\\api\\controller\\order\OrderPay@createOrder');
    Route::post('query-order','app\\api\\controller\\order\OrderQuery@queryOrder');
});

二 在 config/app.php里面加一個應用映射

    'app_map'          => [
        Env::get('htpay.version', 'v1') => 'api', //映射,就是把路徑v1這種導到api應用中。
    ],

上面兩步就可以實現了,這樣你訪問 http://域名/v1/hpay/create-order v1就映射到api應用,hpay/create-order就能訪問到配置的控制器中了,完美實現,代碼不需要更改任何東西。

不過這里要注意下,上面配置的是 Route::post,所以只能通過post的方式來訪問,用其它方式訪問就會訪問不到了,這樣更好,本來想用中間件來限制只能 post訪問,結果根本都不需要了。

好了,上面就是在開發的時候,用到的一些東西,有后續的學習過程中,如果有什么要記錄的,我還會繼續寫的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM