zoukankan      html  css  js  c++  java
  • 了解TP框架的中间件和路由配置

    PHP的TP框架先不说安全或性能怎么样,那功能方面确实也比较强大,而且相对其它框架的门槛要低好多,做一些私活项目,那简直是神器呀,最近做一个小活,用到了这个框架,也是看了一下手册就边做边学了。

    在开发中用到了中间件、注入和依赖、门面模式等,这篇文章简单说下在开发中学到的一点小东西,权当一个自已的学习记录吧。

    先说说中间件,这东西也不是啥多么新鲜和高级的玩样,在很多框架中都有类似实现的方式,像YII的行为和拦截器什么的,也都是差不多的作用。我觉得更多的是将业务和一些逻辑做了解耦分离,使整个业务更清楚,让你不会在一个地方写一大堆代码。

    比如你要控制写日志、权限认证、来源判断、白名单、返回Json等你都可以写在不同的中间件里面,避免了将这些代码写到一个地方去判断,也可以重复利用代码,所以说,适当用上中间件来写,还是挺爽的。

    在TP中,有好几种不同类型的中间件,像全局中间件、应用中间件、路由中间件、控制器中间件,它们之间的执行顺序也是按上面的来的。

    全局中间件

    app/middleware.php定义的中间件

    return [
        // Session初始化
         	hinkmiddlewareSessionInit::class
    ];
    

    应用中间件

    这个是在应用下面定义的,如我的app目录下面有 api,admin应用,那么在 app/api/middleware.php定义

    return [
        appapimiddlewareLog::class
    ];
    

    路由中间件

    就是在注册路由时,可以注册中间件,执行这个路由时,执行相对应的中间件。

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

    控制器中间件

    在控制器中定义$middleware属性,如示例,当访问index控制时,就会执行中间件

    
    
    class Index extends FrontController
    {
    
        protected $middleware = [   appadminmiddlewareCheckAdmin::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 thinkfacadeRoute;
    
    Route::group('hpay',function(){
        Route::post('create-order','app\api\controller\orderOrderPay@createOrder');
        Route::post('query-order','app\api\controller\orderOrderQuery@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访问,结果根本都不需要了。

    好了,上面就是在开发的时候,用到的一些东西,有后续的学习过程中,如果有什么要记录的,我还会继续写的。

  • 相关阅读:
    通过JavaMail发送(群发)邮件示例(内含附件图片) 代码复制可用
    需要把获取系统的当前时间存入库里 获取时是String类型,库里是Datetime类型 String 转化 Date
    用canvas和原生js写的一个笨鸟先飞的小游戏(暂时只有一个关卡)
    Svg和canvas的区别,伪类选择器有哪些(归类)
    微信web网页动态增减输入框,搜索框,基于jQuery weui、jQuery 实现无限插入数据,动态数据生成,外加高德地图POI和根据坐标获取位置信息的页面
    vue 使用tinymce富文本编辑器
    mamp环境下navicat无法链接本地mysql
    tp5 系统变量输出
    开始项目注意事项
    jQuery weui实现下拉刷新事件
  • 原文地址:https://www.cnblogs.com/smartrui/p/13829528.html
Copyright © 2011-2022 走看看