thinkphp的目录结构设计经验总结

示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
关于模型;跟上篇文章thinkphp的目录结构设计经验总结写控制器一个道理;
为了尽量避免改动到框架;
首先我们是要有一个BaseModel.class.php作为我们的基础model;
我会在BaseModel中定义增删改的方法如下;

<?php
namespace Common\Model;
use Think\Model;
/**
 * 基础model
 */
class BaseModel extends Model{
    /**
     * 添加数据
     * @param    array    $data    数据
     * @return   integer           新增数据的id
     */
    public function addData($data){
        $id=$this->add($data);
        return $id;
    }

    /**
     * 修改数据
     * @param    array    $map    where语句数组形式
     * @param    array    $data   修改的数据
     * @return    boolean         操作是否成功
     */
    public function editData($map,$data){
        $result=$this->where($map)->save($data);
        return $result;
    }

    /**
     * 删除数据
     * @param    array    $map    where语句数组形式
     * @return   boolean          操作是否成功
     */
    public function deleteData($map){
        $result=$this->where($map)->delete();
        return $result;
    }

}

为每张表都建一个model;统一放在/Application/Common/Model/目录下即可;
然后所有的模型都继承BaseModel;
以后的增增删改如果没有特殊的需求;就可以直接调用addData、editData、deleteData;
如果有特殊需求的;就在某个表model中重新定义以上方法覆盖掉BaseModel中的addData、editData、deleteData;
这样的实际意义就等于在不改动框架的model的前提下扩展了model中的原本的add、save、delete等方法;
重点想说的是;所有的增删改;都统一用D函数而不要用M函数实例化model然后调用这3个方法;
这样做的好处是;当以后改表了;不用全世界的去找都那些地方调用了add、save、delete一一去改;
增删改都说了;那至于查;
1:强烈建议所有的where条件统一使用数组格式的;避免使用字符串格式的where;
2:竖着排版;
白俊遥博客
竖着排列;要明显优于横着排序;自行对比上下那种更便于阅读;高下立见;
白俊遥博客
3:固定按照 field、alias、join、where、order、limit 、select ;
为什么要按照这个顺序呢?因为这跟我们正常拼sql的顺序一致;

SELECT
    u.id,
    s.*
FROM
    bjy_student AS s
JOIN bjy_users AS u ON s.uid = u.id
WHERE
    s. STATUS = 1
ORDER BY
    date
LIMIT 10;

4:join表的时候;起别名统一使用表的第一个字母;如果两张表的第一个字母一样;那就前两个字母;依次类推;

这样规范了以后;将大大提高检查阅读代码的效率;

//*******************************回复 ZheaJ 童鞋评论的分割线****************************************
针对 ZheaJ 童鞋在评论中提出的问题;这里来做一下详细的解答;
为了更好理解;这里先假设项目
有Admin、User、Home三个模块;
有article、tag、config三张数据库表;
并分别创建了ArticleModel.class.php、TagModel.class.php、configModel.class.php三个model
我建议的是把这三个model统一都放在/Application/Common/Model/目录下;
没有分别在Admin、User、Home模块下分别创建三个model;那就是9个model文件;
原因是在不同模块下创建的model是不能方便的互相调用的;
比如说我Home模块和Admin模块及User模块 都有搜索article表中的文章这样的功能;
如果我每个模块下都有一个ArticleModel.class.php的话;
这个搜索文章的功能代码放那个模块下的ArticleModel.class.php中好呢?
这就要跨模块调用Model;或者复制3份搜索文章的代码了;
这样多出了2倍的model文件需要维护;这里只假设是3张表的;正常项目有多少表;想想都会疯的;
所以综上所述;如果项目没有庞大到一定程度;
所有model统一放在/Application/Common/Model/是比较靠谱的;

//*******************************回复北柒星童鞋评论的分割线****************************************
不只是改表;还有很多场景下;
我们先来假设一个不是很恰当但是能说明问题的场景吧;
比如说我们有文章表、评论表等是跟用户表关联的;
当删除用户的时候;我们需要同时删除其下的文章和评论;
针对用户表如果我们没有一个可以控制到所有删除的deleteData方法的话;
那就含着泪满世界的去找都在那些地方M了user表调用了delete方法吧;
一次还能忍;更可怕的是;然后随着业务的扩展;
每增加一张跟用户关联的表的时候;都得再含泪一次吧;

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共37条评论
白俊遥博客

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 回复

白俊遥博客
  • 云淡风晴 回复 tony:可以;用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 回复

白俊遥博客
  • 云淡风晴 回复 沵→涐的№1:加你了;
  • 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 回复

白俊遥博客
  • 云淡风晴 回复 Passer:哈哈;看来前端页面需要改版了;
  • 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 回复
  • 本站使用自主开发的laravel-bjyblog开源博客程序搭建 © 2014-2017 baijunyao.com 版权所有 ICP证:豫ICP备14009546号-3
  • 联系邮箱:baijunyao@baijunyao.com