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>  -》 &lt;script&gt;alert(1);&lt;/script&gt;        
                目的:防止xss攻击
            参考:https://www.cnblogs.com/loveyouyou616/p/5444976.html
    6,在base控制器公共类 调用$this,返回的是当前控制器的类名,比如在shupping控制器中访问base类然后调用$this,得到的是appindexcontrollerShopping,这是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的技巧
            	hinkLog::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参数=1if(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,
原文地址:https://www.cnblogs.com/cl94/p/10277421.html