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> -》 &lt;script&gt;alert(1);&lt;/script&gt;
目的:防止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');

 
5,待学习
  1,php面向对象的技术
  2,MySQL的精通
  3,http协议
  4,文件上传下载
  5,smarty
  6,错误异常
  7,

thinkphp新的心得的更多相关文章

  1. thinkphp框架使用心得

    接触的第一个PHP框架就是TP,在使用的了一段时间后就放弃了,说实话TP的弊端挺多,之后又接触laravel框架,慢慢的就爱上laravel这个框架了.这段时间由于公司的原因,又不得不使用thinkp ...

  2. flex新的心得

    主要是对于flex: 与width: 的心得,先看代码. <head> <meta charset="UTF-8"> <meta name=" ...

  3. jquery 选择器 -高级使用 新的 心得

    jQuery的each函数: each函数等同于c语言中的for函数: 里面每次循环的 "context 上下文" == 当前的dom ,可以使用this, 也可以使用$(this ...

  4. jquery validate学习心得

    据说,javascript最初的由来就是为了解决表单的验证问题,当然现在的js已经能够用来做各种各样炫酷的效果,不过表单验证一直以来都是js很重要的一个用途(在博客园第一篇博客,不知道说些什么开头~~ ...

  5. EasyUI文档学习心得

    概述 jQuery EasyUI 是一组基于jQuery 的UI 插件集合,它可以让开发者在几乎完全不需要CSS以及复杂的JS代码情况下完成美观且功能强大的Web界面. 本文主要说明一些如何利用Eas ...

  6. C#模板设计模式使用和学习心得

    模板设计模式: 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现. 模版方法:由抽象类 ...

  7. Linux简单编程学习心得

    在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...

  8. Reactjs 列表优化的一些心得

    前言 在应用开发中,列表是我们使用频率非常高的一种展现形式,在reactjs项目中更是如此.无处不在的使用更是需要我们小心触发性能瓶颈的深水炸弹. 下面就我最近的总结出的几点心得分享给大家,有什么问题 ...

  9. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

随机推荐

  1. 小白月赛22 B : 树上子链

    B:树上子链 考察点 : 树的直径 坑点 : long long, 是点权不是边权 一个点也算一条链 析题得侃: 关于树的直径 这道题考察的是树的直径,最好用树形DP来写,具体解释详见上述博客, 这道 ...

  2. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20

    本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...

  3. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  4. MDK Debug (printf) Viewer打印数据

    1.Target Options -> Debug -> Settings(JLink) -> Debug里ort选择SW模式 2.在Target Options -> Deb ...

  5. Codeforce 141A - Amusing Joke (sort)

    So, the New Year holidays are over. Santa Claus and his colleagues can take a rest and have guests a ...

  6. DataGridView 调整列顺序为设计的顺序

    设置: dataGridView1.AutoGenerateColumns = false;

  7. mac或windows下Navicat Premium安装

    找了很多地址都乱七八糟的说明一通还没啥用,好不容易找到一个靠谱的,记录一下,也方便一下和我一样苦苦寻找的人,亲测有用 https://www.52pojie.cn/thread-727433-1-1. ...

  8. 148.CSRF攻击原理分析、防御、装饰器、中间件、IFrame以及js实现csrf攻击

    CSRF攻击概述: CSRF(Cross Site Request Forgery 跨站域请求伪造)是一种网站攻击的方式,它在2007年曾被列为互联网20大安全隐患之一.其他的安全隐患,比如SQL脚本 ...

  9. Ecshop各个页面文件介绍,主要文件功能说明

    1.模板文件说明 style.css – 模板所使用样式表activity.dwt – 活动列表article.dwt – 文章内容页article_cat.dwt – 文章列表页article_pr ...

  10. windows 10 安装使用kafka

    1.安装java环境 自行百度 2. 下载.安装Kafka 打开 下载地址 http://kafka.apache.org/downloads.html 下载二进制文件 Kafka包名组成: Scal ...