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. 2017-9-15Opencv 杂

    Mat::at()的具体含义.指的是三通道.(0),(1),(2)分别表示BGR: Vector<Mat>结构的使用.将Mat类型的数据转化成了具有多个单通道的容器? 灰度图的具体含义.和 ...

  2. js前后端交互

    1.前后端交互模式 2.promise用法 (1)异步调用 (2)ajax回顾 (3).promise 优点:可以解决回调地狱(多层异步调用嵌套问题)(解决代码可读性低的问题) 提供简洁的api (4 ...

  3. 如何在Windows上开启Ping或者禁止PING

    方法1:命令行模式 进入服务器后 点击 开始——运行 输入命令: netsh firewall set icmpsetting 8 这样就可以在外部ping到服务器了 非常简单实用! 同样道理,如果想 ...

  4. 题解【洛谷P3406】海底高铁

    题面 比较基础的前缀和+差分. 注意开\(\text{long long}\) 直接上代码吧. #include <bits/stdc++.h> #define itn int #defi ...

  5. (转)进程同步之临界区域问题及Peterson算法

    转自:http://blog.csdn.net/speedme/article/details/17595821 1. 背景 首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0     ...

  6. Alan Walker MV 合辑01 by defender

    Alan Walker MV合辑  出来啦! 百度网盘下载地址: 链接:https://pan.baidu.com/s/10WSool70XBe_8tJOae8V-w 提取码:uckq 地址查看 Mi ...

  7. 2个月,我从编程小白成为了Python研发工程师

    从编程小白,到Python研发工程师,需要多久呢? 答案就是:91门课,450个小时. 听起来似乎难以实现,但其实如果每天抽出八小时学习,两个月的时间,就能由编程小白转变成为Python工程师,听起来 ...

  8. 10个Python 初学者必知编码小技巧

          技巧 #1   字符串翻转 >>> a = "codementor" >>> print "Reverse is" ...

  9. tensorflow——乘法

    线性代数中,乘法是很重要的运算,具体的矩阵乘法原理可以翻教材,或看一下阮大神的这篇文章:http://www.ruanyifeng.com/blog/2015/09/matrix-multiplica ...

  10. ADO.NET中sqlserver和mysql的变量名

    因为ADO.NET标配是访问SQL SERVER数据库,那么如果需要访问MySQL数据库,那么ADO.NET五个对象也必须转换. 访问 SQL SERVER 的ADO.NET对象 1.SqlConne ...