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,獲得的是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參數=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');php

 5,待學習  1,php面嚮對象的技術  2,MySQL的精通  3,http協議  4,文件上傳下載  5,smarty  6,錯誤異常  7,
相關文章
相關標籤/搜索