用thinkphp开发了好些项目了;最近准备抽空写一些经验总结;
希望能给刚开始接触tp的童鞋们提供一些开发的方案;少走一些弯路;少踩一些坑;
这些绝对都是些精华干货;耐着性子阅读;相信肯定是会有收获的;
可以结合git项目对照研究:https://github.com/baijunyao/thinkphp-bjyadmin
先从thinkphp的目录架构开始吧;
thinkphp-bjyadmin
├─Application 项目逻辑目录
│ ├─Common 公共模块
│ │ ├─Common 公共函数目录
│ │ │ ├─functioin.php 公共函数php文件
│ │ ├─Conf 公共配置文件目录
│ │ │ ├─config.php tp的配置 用于覆盖框架默认配置项
│ │ │ ├─db.php 数据库配置 用户名 密码等
│ │ │ ├─webconfig.php 项目的配置;网站名;是否开启网站等
│ │ ├─Controller 公共控制器目录
│ │ │ ├─BaseController.class.php 应用最基础的控制器
│ │ │ ├─HomeBaseController.class.php Home基础控制器继承BaseController
│ │ │ ├─AdminBaseController.class.php Admin基础控制器继承BaseController
│ │ │ ├─UserBaseController.class.php User基础控制器继承BaseController
│ │ │ ├─...
│ │ ├─Model 公共模型目录
│ │ │ ├─BaseModel.class.php 应用最基础的Model
│ │ │ ├─ArticleModel.class.php 文章model 继承BaseModel
│ │ │ ├─UserModel.class.php 用户model 继承BaseModel
│ │ │ ├─...
│ │ ├─Tag 公共标签目录
│ │ │ ├─My.class.php 自定义的标签库
│ │ │ ├─...
│ ├─Home Home模块
│ │ ├─Controller Home控制器目录 继承HomeBaseController
│ │ │ ├─ArticleController.class.php 文章控制器目录
│ │ │ ├─IndexController.class.php 首页控制器
│ │ │ ├─ ...
│ ├─Admin Admin模块
│ │ ├─Controller Admin控制器目录 继承AdminBaseController
│ │ │ ├─IndexController.class.php 后台管理首页控制器
│ │ │ ├─ ...
│ ├─User User模块
│ │ ├─Controller User控制器目录 继承UserBaseController
│ │ │ ├─IndexController.class.php 用户个人中心首页控制器
│ │ │ ├─ ...
├─Public 资源文件目录
│ ├─install 安装引导目录
│ ├─statics 静态资源目录
│ │ ├─bootstrap bootstrap框架
│ │ ├─ueditor ueditor编辑器
│ │ ├─js jquery等第三方js存放的目录
│ │ ├─css animate.css等第三方css目录
│ │ ├─ ...
├─tpl 视图文件目录
│ ├─Public 公共目录
│ │ ├─js 公共js目录
│ │ │ ├─base.js 全站都引用的js文件
│ │ │ ├─ ...
│ │ ├─css 公共css目录
│ │ │ ├─base.css 全站都引用的css文件
│ │ │ ├─ ...
│ │ ├─images 公共图片目录
│ │ ├─public_head.html 全站通用的公共头部
│ │ ├─public_foot.html 全站通用的公共底部
│ │ ├─...
│ ├─Home 前台Home视图目录
│ │ ├─Public 前台Home的公共目录
│ │ │ ├─js home下调用的js文件目录
│ │ │ ├─css home下调用的css文件目录
│ │ │ ├─images home下调用的图片文件目录
│ │ ├─Index 首页文件目录
│ │ │ ├─index.html 首页
│ │ │ ├─ ...
│ ├─Admin 同Home
│ ├─User 同Home
├─Upload 公共上传目录
│ ├─images 上传的图片目录
│ │ ├─avatar 头像目录
│ │ ├─ueditor ueditor编辑器上传的图片目录
│ │ │ ...
│ │ ...
├─Runtime 缓存目录
├─ThinkPHP 框架系统目录
/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 公共模型目录
这个目录一定要建一个BaseModel.class.php 为什么呢?
巴拉巴拉。。。
巴拉巴拉。。。
好吧;我在组织语言的时候;
发现越写越多;
所以我准备单独开一片文章来写BaseModel的问题;
传送门: thinkphp的model模型的设计经验总结
/Application/Common/Tag 公共标签目录
为了方便开发;我们还是必须要建一个自定义的标签库;My.class.php
什么是标签库呢?我们会发现在模板中tp内置好多标签很好用;比如说foreach、volist、eq;
官方的文档传送门:内置标签
什么?不知道怎么自定义标签? 好吧;再来个传送门:thinkphp自定义模板标签
/Public 资源文件目录
可以把boostrap、jquery等第三方插件扔到这里面
/tpl视图目录
建议把每个模块的View都移到这个目录中集中管理;
不然开发的时候各种点目录切换;那酸爽;谁用谁知道;
而且方便使用gulp等前端自动化构建工具;
thinkphp把模板文件View 独立出来
/tpl/default/Home/Public/js/base.js 和/tpl/default/Home/Public/css/base.css 强烈建议全站都引用;
里面写一些全站都可以用的样式或函数;
比如css的reset;
其他的看上面的目录就可以看明白的;
就不多啰嗦了;
/Runtime 运行时目录
和tpl一样;建议都移到最外层;
方便我们删除缓存;
好吧;认真写博客真的很耗时;
这篇博客写了整整3个小时;
但愿能帮到童鞋们;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
清酒与她 :``1
2019-06-05 11:25:12 回复
PJPCCC :博主你好啊,请问我用QQ登陆,会提示QQ登陆成功,但是却并没有登陆,重复登陆也是这样子,是什么原因呢?
2018-04-12 23:37:02 回复
云淡风晴 :找到跳转的地方;die掉;看看session数据是否存储了;
2018-04-22 21:31:02 回复
PJPCCC :谢谢你~
2018-04-22 21:33:06 回复
阿壮 :
2018-05-01 11:02:49 回复
周海梅 :
2017-11-02 10:48:28 回复
:学习了
2017-10-26 16:46:52 回复
Jack :神,记下文章阅读量 你为中国php发展做出了巨大贡献
2017-09-26 16:38:29 回复
蜗牛 :晕,这儿都能看到你
2017-10-04 23:47:31 回复
Jack :你是哪位?
2017-10-16 16:29:04 回复
收了你无处安放的小青春❤ :有没有redis的具体实现的代码呢,demo也可以哦
2017-08-15 17:19:04 回复
无声无影 :Tp3.2的数据库配置文件默认读取的conf.php吧,如果把数据库配置写在db.php文件中,不需要其他设置了吗,不然tp怎么知道是在db.php里呢?
2017-08-12 13:56:07 回复
hardywalker :config.php中配置个‘LOAD_EXT_CONFIG’=> 'db' ,多个用逗号分隔
2017-08-12 17:58:39 回复
依然小米粥 :每个模块的配置文件放到哪里啊
2017-08-09 16:17:46 回复
秋雨梧桐叶落时 :如果按照白兄的目录,会不会有的文件加载不出来啊
2017-08-02 22:53:38 回复
云淡风晴 :不会;详情已回复你邮件;
2017-08-04 00:15:05 回复
- 韩__ :感谢博主
2017-07-28 17:46:37 回复
@汇魂草 :谢谢楼主,,,学习中受教了》》》
2017-07-27 13:37:02 回复
minmino :学习中
2017-05-15 11:56:58 回复
奔跑 :谢谢
2017-03-27 12:51:28 回复
git :你好 怎么才能让每个用户都注册发表文章啊
2017-03-08 20:23:14 回复
冷月光 :能不能介绍一下ThinkPHP 框架系统目录呢
2017-03-08 14:41:02 回复
南风知我意 :楼主,顶部PHP标签出来了、
2017-01-16 11:52:54 回复
°~~ :鄙人新手一枚看了这里真的好多干货,学习了。。弱弱的问一下博主干php多久了啊
2017-01-10 10:34:14 回复
°~~ :
2017-01-10 10:30:04 回复
Ryan :初学者 很有用
2016-12-27 10:03:37 回复
Hx :啊!
2016-12-09 12:59:41 回复
Hx :啊
2016-12-09 12:59:29 回复
Hx :00
2016-12-09 12:55:46 回复
Hx :00
2016-12-09 12:55:39 回复
Yangsun :强悍啊~ 我开发项目确实需要这样的目录结构
2016-12-05 21:49:19 回复
evan :老板,你的博客代码安装后发博文,为什么封面没有地址上传的?发完以后封面图片未知。
2016-11-29 21:34:33 回复
Eden :向大神多学习~~
2016-11-29 16:19:00 回复
大山 :白大神,能不能整理一套tp5 的auto权限管理系统demo,我们下载下来就能用的
2016-11-25 13:47:50 回复
tony :博主,如果我一个控制器中需要实例化多个数据库模型,可以在控制器构造函数里先全部实例化吗
2016-11-22 19:49:46 回复
云淡风晴 :可以;用D函数就行;
2016-12-05 23:11:15 回复
人品决定一切 :谢谢博主帮助非常大!
2016-11-14 14:28:48 回复
丑小鸭_2012 :太棒了
2016-11-07 12:10:41 回复
羣 :一目了然,感谢分享
2016-11-06 12:17:24 回复
玄阳明 :干货干货,楼主好人
2016-10-21 15:35:54 回复
金松 :真的想叫你一声白哥,今儿看了你写的程序,才知道自己要学的东西太多了,感谢你的分享了,希望日后能看到Thinkphp和jQuery的友好结合版本,期待!!!
2016-10-18 19:47:21 回复
云淡风晴 :不过;我更建议慢慢放开jquery;拥抱更现代的js前端框架;比如说react、angular、vue;
2016-10-18 22:48:56 回复
evan :老板,你的博客代码安装后发博文,为什么封面没有地址上传的?发完以后封面图片未知。
2016-11-29 21:34:51 回复
rookie :谷歌搜来的,正在拜读大作
2016-10-12 15:29:48 回复
淡远如风 :真心大赞!!!!
2016-09-22 11:42:00 回复
飞啊飞啊灰啊灰 :帅白,好帅!今天开始好好拜读博客源码
2016-09-21 11:47:44 回复
云淡风晴 :bjyadmin这个项目更符合这篇文章的设计;bjyblog写的比较早;还没按这个来;
2016-09-21 22:11:32 回复
飞啊飞啊灰啊灰 :这样啊,难怪今天看着跟目录结构有点不同。bjyadmin看着功能好多,好强大~我是想先捣腾个博客出来,哈哈
2016-09-21 23:30:20 回复
飞啊飞啊灰啊灰 :模仿你的博客,用ci仿了个低配版本的,欢迎来逛逛,哈哈http://www.vwebplus.com/
2016-11-07 16:37:55 回复
云淡风晴 :
2016-11-10 23:01:01 回复
阿西里西 :
2016-09-08 10:50:31 回复
沵→涐的№1 :大神 ,q号 多少 学习一下
2016-09-07 07:55:38 回复
云淡风晴 :加你了;
2016-09-07 23:57:03 回复
KingCy沐 :大神膜拜,学习中
2016-09-06 18:53:39 回复
无边丝雨 :├─Application 项目逻辑目录│ ├─Common 公共模块│ │ ├─Common 公共函数目录│ │ │ ├─functioin.php 公共函数php文件│ │ ├─Conf 公共配置文件目录│ │ │ ├─config.php tp的配置 用于覆盖框架默认配置项│ │ │ ├─db.php 数据库配置 用户名 密码等│ │ │ ├─webconfig.php 项目的配置;网站名;是否开启网站等
2016-08-31 17:58:00 回复
无边丝雨 :请问这个生成的目录树用什么插件?
2016-08-31 17:57:23 回复
云淡风晴 :没有插件;都是一行一行手打的;
2016-08-31 23:10:31 回复
道法自然 :大神不错啊,学习了
2016-08-19 16:18:07 回复
青春 :
2016-08-03 20:16:33 回复
Passer :看博主大作需要自助在内容DOM上增加line-height属性。ps:这条评论失败3次。 交互体验的设计很重要啊。
2016-06-21 23:45:27 回复
云淡风晴 :哈哈;看来前端页面需要改版了;
2016-06-22 14:14:56 回复
幽谷清风 :
2016-05-27 14:26:15 回复
幽谷清风 :
2016-05-27 14:26:04 回复
幽谷清风 :
2016-05-27 14:25:54 回复
流水 :你好能发我点你开发的项目源码不 我参考 (商城微信的)
2016-04-19 16:45:51 回复
云淡风晴 :商城的暂时没整理源代码发布;博客开源了:http://git.oschina.net/shuaibai123/thinkbjy
2016-04-20 21:15:32 回复
最新评论