1,代码的高度复用 1,js的删除,弹出框均可以用嵌入的js,不用每一个页面都写 2,控制器的初始化函数能够实现配置某些变量,好比admin模块的topic控制器的初始化函数能够 $this->obj = model('Topic'); 3,验证器使用模块文件夹下validate文件夹建立的控制器类(模型与验证器对应),那么不用每次都建立 //验证器 $validate = validate('User'); //获得结果 $result = $validate->scene('registe')->check($data); if(!$result){ $this->error($validate->getError()) ; } 4,一些常常调用的api,统一写在api模块下,这样就算是移动端都能调用了 5,模型类里建立一下方法,譬如查询列表,删除某条数据... ,甚至能够继承base模型类,在base模型类里写某些方法。这样九避免了每次都在 控制器里面写方法 6,某些常常使用的方法,写在common里面 7,一些config设置能够extra文件夹下的email.php里,调用方式:config('email.example') 。或者写在模块文件夹下的config.php里,调用:config('example') 8,index控制器能够继承base控制器,公共方法status放在base控制器里,调用index/index/status会自动执行base控制器的status方法(这是php的继承原理), 然获在base的status方法里获取取当前控制器 request()->controller() (string(8) "Index"), 而后处理逻辑就行了 (模型也同理) 2,易读性的代码结构 1,根目录extend文件夹里面写第三方类库(发送邮件...),命名空间namespace mailer;以后在控制器直接调用这些类库就行 2,逻辑能写在控制器尽可能不要写在模板 3,一些杂的知识点 1,助手函数:model('User') validate('User') //快捷获取模型,控制器对象 2,request()->domain() //当前域名 3,模型的关联查询效率不高 4,前端就是js 5,htmlentities($str,ENT_QUOTES,'UTF-8'); 能够把字符串转换成html实体 例如:<script>alert(1);</script> -》 <script>alert(1);</script> 目的:防止xss攻击 参考:https://www.cnblogs.com/loveyouyou616/p/5444976.html 6,在base控制器公共类 调用$this,返回的是当前控制器的类名,好比在shupping控制器中访问base类而后调用$this,获得的是app\index\controller\Shopping,这是php基础知识,结合1-5,1-8理解 7,session能够用模块为做用域,省得各个模块的做用域混乱 8,经过控制器也能加载图片 img src="{url('index/index/index',['demo','123'])}" 9,tp的助手函数 input('get.id',0,'intval'); 只接收为整数的id 10,$_SERVER['HTTP_REFERER']获取来路 11,设计到数据库的插入,更新,应该try catch 12,tp打log的技巧 \think\Log::write('id:'.$id,'demo'); 能够在runtime/log/2019/18.log文件中看见 [ demo ] xxxxxxxx 若是须要在其余文件中更容易查看,在config的log键下设置 'apart_level' => ['demo'], 心得:能够查出效率低的sql 13,tp框架测试一段代码的消耗时间和消耗内存(debug是助手函数) debug('begin'); ---开始的地方 . . ---一段代码 . debug('end'); ----结束的地方 dump( debug('begin','end')); ---输出消耗的时间(秒) dump( debug('begin','end','m')); ---输出消耗的内存 4,一些思路 1,首页有所在城市,默认是北京,能够自由切换其余城市 思路:城市保存在session里面,base控制器调用获得城市的方法,而后赋值到模板 方法是这样的:找数据库,获得默认城市(default参数=1) if(input('get.default_city')) { 城市=get请求的城市 //加入到session } elseif(session有城市) { 城市=session的城市 } else { 城市=默认城市 } 2,thinkphp+mysql的find_in_set能够从字段的1,2,3中查询2 用途:1个商品属于分类2,也属于分类3,分类字段值为2,3 经过c_id=2能查到c_id=3也能查到这条数据 http://www.cnblogs.com/xiaoxi/p/5889486.html
3,sql通常先建立好了,而后再导入到数据库
模板sql.sql:
/*建立*/
create database conpany charset=utf8;
/*选择数据库*/
use conpany;
/*建立导航表*/
create table user(
id int not null auto_increment primary key,
name varchar(10) not null default '' comment '名称'
)charset=utf8;
/*建立一个超级管理员*/
insert into user values(default,'admin');php
5,待学习 1,php面向对象的技术 2,MySQL的精通 3,http协议 4,文件上传下载 5,smarty 6,错误异常 7,