我的后台模块 admin,所有控制器都需要操作鉴权,或者构建操作菜单,或者其它一些公共操作
在忽略中间键的前提下:
我以前的写法都是,写一个“母版”控制器common,然后所有的控制器继承这个母版控制器,在母版中做这些操作,我总觉得这样的写法蹩脚 !
我不是很理解面向对象中的应用公共文件,当然thinkphp 里的 common.php 这种自定义函数,这个不算。
求分析 …
我的后台模块 admin,所有控制器都需要操作鉴权,或者构建操作菜单,或者其它一些公共操作
在忽略中间键的前提下:
我以前的写法都是,写一个“母版”控制器common,然后所有的控制器继承这个母版控制器,在母版中做这些操作,我总觉得这样的写法蹩脚 !
我不是很理解面向对象中的应用公共文件,当然thinkphp 里的 common.php 这种自定义函数,这个不算。
求分析 …
举个例子
公共模块
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...
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答887 阅读✓ 已解决
1 回答553 阅读✓ 已解决
我说的不一定对,但是想跟你交流下,我认为应用公共文件包括前段文件个后端文件,后端的就是一些控制器的公共方法,比如说怎删改查,前段的就是一些页头页尾之类的