ThinkPhp5 | 模塊分析

ThinkPhp5框架是一款基于MVC的輕量級(jí)開(kāi)發(fā)框架稽煤,其模塊化的搭建,簡(jiǎn)單有效轧简,相比于之前的版本匾二,是一次顛覆性的改變。本文皮璧,結(jié)合一些網(wǎng)站的常用功能分飞,簡(jiǎn)要分析一下基本原理譬猫,小試牛刀一把。

相比于ThinkPhp3完全開(kāi)發(fā)染服,ThinkPhp5快速入門柳刮,更加適合快速學(xué)習(xí),掌握其主要組成痢毒,有一攬全局的開(kāi)闊站宗。

一益愈、登錄模塊

  • 填寫(xiě)登陸用戶名和密碼,登陸成功后跳轉(zhuǎn)敏释;關(guān)閉頁(yè)面摸袁,在一定時(shí)間內(nèi)重新登錄靠汁,不用重新登錄闽铐,直接跳轉(zhuǎn)奶浦;原因在于服務(wù)器端保存包含該用戶信息的session澳叉。
百度糯米登錄.png
// 登錄
public function login()
{
        // 登錄檢測(cè)用戶session是否存在,存在直接跳轉(zhuǎn)頁(yè)面五督,不存在繼續(xù)登錄
        $user = session('o2o_user','', 'o2o'); 
        if($user && $user->id) {
           $this->redirect(url('index/index'));
        }
        return $this->fetch();
}
// 登錄檢測(cè)
public function logincheck() 
{
        //判定是否為post表單請(qǐng)求
        if(!request()->isPost()) {
           $this->error('提交不合法');
        }
       //獲取表單數(shù)據(jù)
        $data = input('post.');
       //基于模型獲取用戶數(shù)據(jù)
        try {
            $user = model('User')->getUserByUsername($data['username']);
        }catch (\Exception $e){
            $this->error($e->getMessage());
        }
       //用戶不存在或者用戶存在狀態(tài)不為1
        if(!$user || $user->status != 1) {
            $this->error('該用戶不存在');
        }
        // 基于加鹽字符串充包,md5加密判斷密碼
        if(md5($data['password'].$user->code) != $user->password) {
            $this->error('密碼不正確');
        }
        // 登錄成功遥椿,更新用戶登錄時(shí)間
        model('User')->updateById(['last_login_time'=>time()], $user->id);
        //把用戶信息記錄到session
        session('o2o_user', $user, 'o2o');
        $this->success('登錄成功', url('index/index'));
}

二修壕、驗(yàn)證碼機(jī)制

  • ThinkPhp5中的驗(yàn)證碼使用靈活,學(xué)會(huì)使用即可蓝谨,具體參照手冊(cè)
//1- composer依賴管理工具安裝驗(yàn)證碼類庫(kù)青团,自動(dòng)安裝到vendor文件夾
composer require topthink/think-captcha
//2- 頁(yè)面中調(diào)用助手函數(shù)captcha_img()
<input type="text" name="verifycode" placeholder="請(qǐng)輸入驗(yàn)證碼">
<div>{:captcha_img()}</div>
//3- 在后臺(tái)實(shí)現(xiàn)驗(yàn)證碼校驗(yàn),調(diào)用助手函數(shù)captcha_check()
if(!captcha_check($data['verifycode'])) {
      // 校驗(yàn)失敗
      $this->error('驗(yàn)證碼不正確');
}
//4- 實(shí)現(xiàn)點(diǎn)擊自動(dòng)刷新驗(yàn)證碼圖片
$js_src = "this.src='".captcha_src()."'";
return '![](' . captcha_src($id) . ')';
//5- 助手函數(shù)位于vendor文件夾下面的helper.php中

三芦昔、Ajax異步獲取數(shù)據(jù)

  • Ajax用于于后臺(tái)服務(wù)器進(jìn)行少量的數(shù)據(jù)交互咕缎,被廣泛使用料扰,下面以我們經(jīng)常填寫(xiě)的注冊(cè)信息為例,點(diǎn)擊左側(cè)嫂伞,右側(cè)數(shù)據(jù)自動(dòng)更新。
點(diǎn)擊左側(cè)撰豺,右側(cè)自動(dòng)更新.png
$(".cityId").change(function(){
    //獲取class為cityId的值
    city_id = $(this).val();
    //此為拋送到后端服務(wù)器的請(qǐng)求地址
    url = SCOPE.city_url;
    //組裝數(shù)據(jù)
    postData = {'id':city_id};
    $.post(url,postData,function(result){
        //回掉函數(shù)返回成功郑趁,則組裝信息姿搜,填充html
        if(result.status == 1) {
            // 將信息填充到html中
            data = result.data;
            city_html = "";
            $(data).each(function(i){
                city_html += "<option value='"+this.id+"'>"+this.name+"</option>";
            });
            $('.se_city_id').html(city_html);
        }else if(result.status == 0) {
            $('.se_city_id').html('');
        }
    }, 'json');
});

四舅柜、圖片上傳

  • 基于ThinkPhp5的文件上傳機(jī)制,借助于uplodify插件致份,實(shí)現(xiàn)圖片上傳功能氮块,uplodify插件學(xué)習(xí)
圖片上傳.png
$(function() {
    $("#file_upload").uploadify({
        'swf'             : SCOPE.uploadify_swf,
        //自動(dòng)跳轉(zhuǎn)到該地址'{:url('api/image/upload')}'
        'uploader': SCOPE.image_upload,
        'buttonText'      : '圖片上傳',
        'fileTypeDesc'    : 'Image files',
        'fileObjName'     : 'file',
        'fileTypeExts'    : '*.gif; *.jpg; *.png',
        'onUploadSuccess' : function(file, data, response) {
            console.log(file);
            console.log(data);
            console.log(response);
            if(response) {
                var obj = JSON.parse(data);
                // 將返回的數(shù)據(jù)填充到頁(yè)面中
                $("#upload_org_code_img").attr("src", obj.data);
                $("#file_upload_image").attr("value", obj.data);
                $("#upload_org_code_img").show();
            }
        }
    });
// 后端跳轉(zhuǎn)地址的處理邏輯
public function upload() {
        //實(shí)例化一個(gè)文件對(duì)象
        $file = Request::instance()->file('file');
        // 給定一個(gè)圖片存儲(chǔ)的文件目錄
        $info = $file->move('upload');
        if($info && $info->getPathname()) {
            return show(1, 'success','/'.$info->getPathname());
        }
        return show(0,'upload error');
    }

五、前端校驗(yàn)

  • 在電商的商品詳情頁(yè)中阳谍,存在著購(gòu)買數(shù)量的選擇螃概,此處存在著前端校驗(yàn)和動(dòng)態(tài)頁(yè)面,如下圖:
前端數(shù)量校驗(yàn).png
//1- 如果在數(shù)量框內(nèi)輸入非數(shù)字的內(nèi)容训貌,自動(dòng)更細(xì)為1
//2- 如果數(shù)量為1冒窍,則左側(cè)的數(shù)量'-'按鈕則會(huì)失效

// 判斷是否為正整數(shù)
function isNaN(number){
    var reg = /^[1-9]\d*$/;
    return reg.test(number);
  }
// 事件更改機(jī)制
  function inputChange(num){
    // 不是正整數(shù)超燃,則自動(dòng)為1
    if(!isNaN(num)){
      $(".buycount-ctrl input").val("1");
    }
   // 是正整數(shù)拘领,則保留原值
    else{
      $(".buycount-ctrl input").val(num);
      // 值為1,則自動(dòng)過(guò)濾届良,使左側(cè)樣式失效
      if(num == 1){
        $(".buycount-ctrl a").eq(0).addClass("disabled");
      }
     // 值不為1,左側(cè)樣式有效
      else{
        $(".buycount-ctrl a").eq(0).removeClass("disabled");
      }
    }
  }
  $(".buycount-ctrl input").keyup(function(){
    var num = $(".buycount-ctrl input").val();
    inputChange(num);
  });
  $(".minus").click(function(){
    var num = $(".buycount-ctrl input").val();
    num--;
    inputChange(num);
  });
  $(".plus").click(function(){
    var num = $(".buycount-ctrl input").val();
    num++;
    inputChange(num);
  });

六乞而、百度地圖加載

  • 在美團(tuán)爪模、糯米等團(tuán)購(gòu)網(wǎng)站荚藻,以及在滴滴、Uber等快車軟件中共郭,總是可以看到很多地圖加載疾呻,簡(jiǎn)單學(xué)習(xí)使用一些百度地圖接口,加載地址圖片尉咕,Geocoding API使用璃岳,點(diǎn)擊查閱。
百度地圖加載.png
public static function staticimage($center) {
        if(!$center) {
            return '';
        }
       // 由配置文件提供
        $data = [
            'ak' => config('map.ak'),
            'width' => config('map.width'),
            'height' => config('map.height'),
            'center' => $center,
            'markers' => $center,
        ];
        $url = config('map.baidu_map_url').config('map.staticimage').'?'.http_build_query($data);
        $result = doCurl($url);
        return $result;
    }
// 由common.php文件提供
function doCurl($url, $type=0, $data=[]) {
    $ch = curl_init(); // 初始化
    // 設(shè)置選項(xiàng)
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER,0);

    if($type == 1) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    //執(zhí)行并獲取內(nèi)容
    $output = curl_exec($ch);
    // 釋放curl句柄
    curl_close($ch);
    return $output;
}

到這里,就暫時(shí)休息休息缓溅。今天天氣赁温,陽(yáng)光中有些許的微風(fēng),還是很適合出門的袜匿。出門撒歡去稚疹,周末快樂(lè)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末义锥,一起剝皮案震驚了整個(gè)濱河市岩灭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柱恤,老刑警劉巖找爱,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缴允,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡矗漾,警方通過(guò)查閱死者的電腦和手機(jī)薄料,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)誊役,“玉大人谷市,你說(shuō)我怎么就攤上這事∨羝幔” “怎么了创泄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵鞠抑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我秒梳,道長(zhǎng),這世上最難降的妖魔是什么礼烈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任婆跑,我火速辦了婚禮滑进,結(jié)果婚禮上募谎,老公的妹妹穿的比我還像新娘。我一直安慰自己节槐,他們只是感情好拐纱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布秸架。 她就那樣靜靜地躺著,像睡著了一般蚂子。 火紅的嫁衣襯著肌膚如雪缭黔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天董瞻,我揣著相機(jī)與錄音钠糊,去河邊找鬼壹哺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛截珍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岗喉,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钱床,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼查牌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纸颜,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胁孙,失蹤者是張志新(化名)和其女友劉穎涮较,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體法希,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苫亦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年屋剑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉匾。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巍膘,死狀恐怖峡懈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肪康,我是刑警寧澤撩穿,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布食寡,位于F島的核電站,受9級(jí)特大地震影響廓潜,放射性物質(zhì)發(fā)生泄漏抵皱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一茉帅、第九天 我趴在偏房一處隱蔽的房頂上張望叨叙。 院中可真熱鬧锭弊,春花似錦堪澎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至剑鞍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚁署,已是汗流浹背便脊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留光戈,地道東北人哪痰。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像久妆,于是被迫代替她去往敵國(guó)和親晌杰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容