thinkphp5 中的应用公共文件怎么理解?

末子
  • 61

我的后台模块 admin,所有控制器都需要操作鉴权,或者构建操作菜单,或者其它一些公共操作

在忽略中间键的前提下:

我以前的写法都是,写一个“母版”控制器common,然后所有的控制器继承这个母版控制器,在母版中做这些操作,我总觉得这样的写法蹩脚 !

我不是很理解面向对象中的应用公共文件,当然thinkphp 里的 common.php 这种自定义函数,这个不算。

求分析 …

回复
阅读 1.5k
3 个回答

我说的不一定对,但是想跟你交流下,我认为应用公共文件包括前段文件个后端文件,后端的就是一些控制器的公共方法,比如说怎删改查,前段的就是一些页头页尾之类的

举个例子
公共模块

public function checkmsg ($phone,$msg);{
    if(手机验证码正确){
            returun true;
    }else{
         throw new Exception("验证码错误");
    }
}

home模块 的一个注册模块要用到验证码功能

public function login($msg,$phone,$password){
    公共模块下的checkmsg($phone,$msg);
    //后面就是添加这个用户的信息到数据等操作。。。
}

admin模块 一个需要通过手机号码验证管理员身份的功能

public function checkauthority($msg,$phone){
     公共模块下的checkmsg($phone,$msg);
    //确认是管理员后就可以进行XXX操作了
}

这样就可以共同用一个东西

这种最常见用采用的
BaseController
然后的
AdminController extend BaseController

这样的显然楼主是不想要的

那么来一点“设计模式”

我们可以把依赖先注入到堆栈中,要用的时候再触发呗。

在tp3.2 和tp5中都可以用

这里用TP5

amespace app\index\behavior;

use think\Request;

class Test 
{
    public function run(Request $request, $params)
    {
        // 行为逻辑
    }
}

在应用目录下面或者模块的目录下面定义tags.php文件来统一定义行为,定义格式如下

return [
    //index目录下
    'app_init'=> [
        'app\\index\\behavior\\CheckAuth',
    ],
]

直接执行行为

// 执行 app\index\behavior\CheckAuth行为类的run方法 并引用传入params参数
$result = Hook::exec('app\\index\\behavior\\CheckAuth',$params);

详情见 钩子和行为 :https://www.kancloud.cn/manua...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏