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都不好意思继续混博客园了(开个玩笑).那么 ...
随机推荐
- 2017-9-15Opencv 杂
Mat::at()的具体含义.指的是三通道.(0),(1),(2)分别表示BGR: Vector<Mat>结构的使用.将Mat类型的数据转化成了具有多个单通道的容器? 灰度图的具体含义.和 ...
- js前后端交互
1.前后端交互模式 2.promise用法 (1)异步调用 (2)ajax回顾 (3).promise 优点:可以解决回调地狱(多层异步调用嵌套问题)(解决代码可读性低的问题) 提供简洁的api (4 ...
- 如何在Windows上开启Ping或者禁止PING
方法1:命令行模式 进入服务器后 点击 开始——运行 输入命令: netsh firewall set icmpsetting 8 这样就可以在外部ping到服务器了 非常简单实用! 同样道理,如果想 ...
- 题解【洛谷P3406】海底高铁
题面 比较基础的前缀和+差分. 注意开\(\text{long long}\) 直接上代码吧. #include <bits/stdc++.h> #define itn int #defi ...
- (转)进程同步之临界区域问题及Peterson算法
转自:http://blog.csdn.net/speedme/article/details/17595821 1. 背景 首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0 ...
- Alan Walker MV 合辑01 by defender
Alan Walker MV合辑 出来啦! 百度网盘下载地址: 链接:https://pan.baidu.com/s/10WSool70XBe_8tJOae8V-w 提取码:uckq 地址查看 Mi ...
- 2个月,我从编程小白成为了Python研发工程师
从编程小白,到Python研发工程师,需要多久呢? 答案就是:91门课,450个小时. 听起来似乎难以实现,但其实如果每天抽出八小时学习,两个月的时间,就能由编程小白转变成为Python工程师,听起来 ...
- 10个Python 初学者必知编码小技巧
技巧 #1 字符串翻转 >>> a = "codementor" >>> print "Reverse is" ...
- tensorflow——乘法
线性代数中,乘法是很重要的运算,具体的矩阵乘法原理可以翻教材,或看一下阮大神的这篇文章:http://www.ruanyifeng.com/blog/2015/09/matrix-multiplica ...
- ADO.NET中sqlserver和mysql的变量名
因为ADO.NET标配是访问SQL SERVER数据库,那么如果需要访问MySQL数据库,那么ADO.NET五个对象也必须转换. 访问 SQL SERVER 的ADO.NET对象 1.SqlConne ...