# 其他模块里的控制器/模型/视图, 继承公共模块里的控制器/模型/视图
Common模块和普通模块一样,可以添加控制器、模型和视图,并且支持多层,但不能直接访问,只能继承,其中模型层 可以作为公用模型,在D方法实例化中调用。D函数实例化的时候 才能自动判断 当前模块模型类不存在的时候实例化公共模块中的同名模型,自己实例化肯定做不到这点了。
# common.php里的函数可以在任何地方直接调用
# common下可以设置文件夹如 Controller, Model, Conf,Common
// 3.2.3本人最看重的特点就是“模块独立”,尽量不要跨模块,
如果每个模块都需要的东西我们就放到公共模块下面;
如果仅仅当前自己的模块需要,那么就写在当前自己的模块里面。
# Common里定义Controller类,在home里引用为父类
怎么定义随便你 但是想要做到自动加载就需要按照目录结构来定义命名空间,例如
Common/Library/Org/Util/ClassName
或者你注册一个新的根命名空间:Library,在配置文件中定义如下
'AUTOLOAD_NAMESPACE'=>array(
'Library'=>COMMON_PATH.'Library/',
)
然后你的类名就可以用
Library/Org/Util/ClassName
namespace Common\Controller;use Think\Controller; class YanzhenController extends Controller { public function _initialize(){ echo 111; } /*public function _initialize(){ echo 111; }*/ } --------------------------------------------namespace Home\Controller;use Think\Controller;use Common\Controller\YanzhenController; class IndexController extends YanzhenController{ public function index(){ $this->display(); } |
---|
# Common里定义Model类,在home里引用 #common下可放的内容
/Application/Common/Common/function.php 这个作为常用公共函数文件; 平时经常用的自定义函数都可以放里面; 比如说 之前写过的p函数 以符合人类阅读的方式打印php数组 然后还建议写:判断用户是否登陆的函数、获取当前登陆用户id的函数、上传函数、图片处理函数、验证码函数、分页函数等等;
/Application/Common/Conf 公共配置项目录下 我建议至少创建如下3个文件 config.php、db.php、webconfig.php 为什么要创建3个配置项文件呢?我来详细的讲解这三个文件的作用; config.php里面都是系统的配置项; 我们这个文件主要是用来覆盖框架默认的配置项; 这个文件好理解些; db.php 数据库的账号密码等; 单独放一个文件是因为很多时候; 这个文件需要根据应用安装的时候填写的数据库账号密码生成的文件; 具体可以查看文章中的使用:thinkphp安装引导程序 webconfig.php 这个文件放置一些可以在后台更改的配置; 比如说是否关闭网站、网站的关键字之类的;这个文件独立出来的原因同上;
/Application/Common/Controller 公共控制器目录 为了开发维护升级的方便 以及尽量避免改动框架的文件的原则; 不改动框架的Controller.class.php 所以呢;这个目录下一定要建一个BaseController.class.php; 以后所有的Controller都继承它; 这样只要在BaseController里面写的方法; 所有的控制器都继承到了;都可以用到; 就例如我们可以写一些$this->success() $this->error() $this->display()类似的所有Controller都可以用的方法; 但是呢;我们开发的项目可能会比较复杂; 只有一个BaseController会比较杂乱; 所以我们还可以根据业务需求再建很多XXBaseContr.class.php来继承BaseController; 我们来构建一种场景; 我想能分别控制:关闭整站的访问、只关闭后台管理员的访问、只关闭普通用户的访问; 因为所有的Controller都继承了BaseController.class.php; 所有我只需要在BaseController.class.php的_initialize或者__construct构造函数中写一个die; 这样无论怎么访问都会被die掉而无法继续执行;这个过程一般是在后台配置的; 再因为后台的的controller都继承了AdminBaseController.class.php所有关闭的道理同上了; 当然只是用来关闭就太低级了;AdminBaseController.class.php 可以在__construct构造函数中判断如果不是管理员;禁止访问; 我们只需要所有把所有需要有管理员权限才可访问的控制器全部继承 AdminBaseController; 这样这些控制器就不需要每个都判断是否是管理员了; 具体可以看 thinkphp集成系列之rbac的升级版auth权限管理系统demo UserBaseController.class.php 等其他xxBaseController同样道理; 比如说用户的个人中心必须是登陆状态才可访问等等; 还有个HomeController.class.php不用我说就知道可以干嘛了吧;
/Application/Common/Model 公共模型目录