zoukankan      html  css  js  c++  java
  • 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,
  • 相关阅读:
    ueditor 后端配置项没有正常加载,上传插件不能正常使用 UTF8 PHP
    dedecms 后台栏目全部展开 包括三级栏目
    修改DedeCMS图片上传路径命名规则的具体方法步骤
    dedecms织梦副栏目名称和链接调用
    当位于顶级栏目显示下级栏目,当位于二级栏目显示同级栏目,当位于三级目录,显示上级栏目
    织梦多个栏目arclist调用副栏目不显示的解决办法
    PL/SQL连接64位Oracle配置方法
    U盘分区之后如何恢复
    Myeclipse 的使用随笔
    eclipse和myeclipse的差别问题
  • 原文地址:https://www.cnblogs.com/cl94/p/10277421.html
Copyright © 2011-2022 走看看