thinkphp新的心得
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');
5,待学习
1,php面向对象的技术
2,MySQL的精通
3,http协议
4,文件上传下载
5,smarty
6,错误异常
7,
thinkphp新的心得的更多相关文章
- thinkphp框架使用心得
接触的第一个PHP框架就是TP,在使用的了一段时间后就放弃了,说实话TP的弊端挺多,之后又接触laravel框架,慢慢的就爱上laravel这个框架了.这段时间由于公司的原因,又不得不使用thinkp ...
- flex新的心得
主要是对于flex: 与width: 的心得,先看代码. <head> <meta charset="UTF-8"> <meta name=" ...
- jquery 选择器 -高级使用 新的 心得
jQuery的each函数: each函数等同于c语言中的for函数: 里面每次循环的 "context 上下文" == 当前的dom ,可以使用this, 也可以使用$(this ...
- jquery validate学习心得
据说,javascript最初的由来就是为了解决表单的验证问题,当然现在的js已经能够用来做各种各样炫酷的效果,不过表单验证一直以来都是js很重要的一个用途(在博客园第一篇博客,不知道说些什么开头~~ ...
- EasyUI文档学习心得
概述 jQuery EasyUI 是一组基于jQuery 的UI 插件集合,它可以让开发者在几乎完全不需要CSS以及复杂的JS代码情况下完成美观且功能强大的Web界面. 本文主要说明一些如何利用Eas ...
- C#模板设计模式使用和学习心得
模板设计模式: 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现. 模版方法:由抽象类 ...
- Linux简单编程学习心得
在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...
- Reactjs 列表优化的一些心得
前言 在应用开发中,列表是我们使用频率非常高的一种展现形式,在reactjs项目中更是如此.无处不在的使用更是需要我们小心触发性能瓶颈的深水炸弹. 下面就我最近的总结出的几点心得分享给大家,有什么问题 ...
- 再讲IQueryable<T>,揭开表达式树的神秘面纱
接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...
随机推荐
- Fastbin attack
Fastbin Attack 暂时接触到了两种针对堆分配机制中fastbin的攻击方式,double free和house of spirit Double free 基本原理 与uaf是对free之 ...
- 541-反转字符串 II
541-反转字符串 II 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转.如果剩余少于 k 个字符,则将剩余的所有全部反转.如果有小于 2k 但大于或等 ...
- 51Nod 1449 砝码称重 (二进制思想)
现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组 ...
- 跨站脚本(XSS)
1.1 XSS定义 XSS,即为(Cross Site Scripting),中文名为跨站脚本,是发生在目标用户的浏览器层面上的,当渲染DOM树的过程发生了不在预期内执行的JS代码时,就发生了XSS攻 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- 白面系列 redis
redis是Key-Value数据库,和Memcached类似.value可以是多种类型,如Strings, Lists, Hashes, Sets 及 Ordered Sets等. redis一个牛 ...
- fastadmin 框架中图片点击放大
fastadmin的原生图片预览,重新打开一个窗口太麻烦,使用layui做一个弹窗式的图片预览 1.将下面代码放在backend-init.js文件中 $('body').on('click', '[ ...
- P1010 幂次方(分治)
https://www.luogu.com.cn/problem/P1010 刚刚看到这个题时,有点懵,如果说这是个数学题 比如说7,应该先求出7 = 4 + 2 + 1; 即先分解出里面应该有最多的 ...
- Python连接操作数据库
步骤: 1.创建与数据库的连接对象: 2.创建游标: 3.通过游标执行语句 4.增删改需要提交(commit)数据 5.关闭连接 如: import MySQLdb # Python通过MySQL ...
- Netcat工具
一般Netcat有两个版本,一个版本是不提供反向连接的版本,一个是全功能版本.这两者的区别就是是否带-e参数,只有带-e参数的版本才支持反向连接. 参数说明 -c shell commands she ...