composer組件化開發(fā),個人總結

組件
只提供單一功能,不和其他功能產(chǎn)生耦合
復用性強,一般放在公共模塊,別的模塊都可以使用
注意:
1.簡單的功能,自己封裝一個組件,不要使用第三方.第三方組件的代碼冗余,學習成本,掌控程度都沒有自己寫好.
2.使用合適的第三方組件,可以節(jié)約大量時間
3.結合業(yè)務提前做好設計,例如使用策略模式.
4.盡量不要直接使用組件,自己在封裝一次,因為組件是可能更換,面向功能開發(fā),
一,支付組件
composer require riverslei/payment
很強大,支持支付寶,微信,PC支付,APP支付,公眾號支付,掃描支付等等.
新建pay.php

use Payment\Common\PayException;
use Payment\Client\Charge;
use Payment\Client\Refund;
use Payment\Client\Transfer;
/**
 *
 * @param object    $payData      訂單數(shù)據(jù)
 * @param string    $type      支付類型
 */
public function payOrder($payData, $type='aliconfig')
{
    $Config = config($type);//獲取配置信息
    try {
        $str = Charge::run($type, $Config, $payData);
    } catch (PayException $e) {
        $msg = $e->errorMessage();
        throw new \Exception($msg);
    }
    return $str;
}

二.云存儲
composer require qiniu/php-sdk
核心代碼;默認使用七牛云存儲

public function __construct($type='qiniu')
{
    $config = Config::get($type)
    $accessKey = $this->config['accessKey'];
    $secretKey = $this->config['secretKey'];
    //初始化Auth狀態(tài):
  $this->auth = new Auth($accessKey, $secretKey);
}

三,消息通知
極光消息通知
composer require jpush/jpush
核心代碼同上,使用策略模式,加載不同的配置文件,
消息通知是可能更換的
四,excel導入導出

namespace app\common\service;
class Phpexcel{
    public function import_excel($filename){
        // 判斷文件是什么格式
         $file=ROOT_PATH.'runtime'. DS .$filename;
        //$file=ROOT_PATH.'a.xlsx';

        $type = pathinfo($file);
        $type = strtolower($type["extension"]);
        if($type==='xls'){
            $type='Excel5';
        }else{
            $type='Excel2007';
        }

        ini_set('max_execution_time', '0');
        Vendor('Classes.PHPExcel');
        // 判斷使用哪種格式
        $objReader = \PHPExcel_IOFactory::createReader($type);
        $objPHPExcel = $objReader->load($file);
        $sheet = $objPHPExcel->getSheet(0);
        // 取得總行數(shù)
        $highestRow = $sheet->getHighestRow();

        // 取得總列數(shù)
        $highestColumn = $sheet->getHighestColumn();
        ++$highestColumn;
       //循環(huán)讀取excel文件,讀取一條,插入一條
        $data=array();
        //從第二行開始讀取數(shù)據(jù)
        for($j=2;$j<=$highestRow;$j++){
            //從A列讀取數(shù)據(jù)
            for($k='A';$k!=$highestColumn;++$k){
                // 讀取單元格
                $data[$j][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
            }
        }
        //die;
        return $data;
    }

    public function create($data=[],$filename='simple.xls'){

        ini_set('max_execution_time', '0');
        Vendor('Classes.PHPExcel');
        $filename=str_replace('.xls', '', $filename).'.xlsx';
        $phpexcel = new \PHPExcel();
        $phpexcel->getProperties()
            ->setCreator("Maarten Balliauw")
            ->setLastModifiedBy("Maarten Balliauw")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");
        $phpexcel->getActiveSheet()->fromArray($data);
        $phpexcel->getActiveSheet()->setTitle('Sheet1');
        $phpexcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename=$filename");
        header('Cache-Control: max-age=0');
        header('Cache-Control: max-age=1');
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
        header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header ('Pragma: public'); // HTTP/1.0
        return $objwriter = \PHPExcel_IOFactory::createWriter($phpexcel, 'Excel2007');
        $objwriter->save('php://output');
        exit;
    }
}

五,百度地圖
注意:地圖可能更換,比如換成高德.
核心代碼

/*
 *獲取行駛距離和時間
 */
public function getMileageTime($start_lat, $start_lng, $end_lat, $end_lng)
{
    $origins = $start_lat . ',' . $start_lng;
    $destinations = $end_lat . ',' . $end_lng;
    $data['origins'] = $origins;
    $data['destinations'] = $destinations;
    $data['output'] = 'json';
    $data['tactics'] = 11;

    $data['ak'] = $this->config['ak'];
    $uri = 'http://api.map.baidu.com/routematrix/v2/driving?' . http_build_query($data);
    $address = $this->http_get($uri);
    $da=[];
    if ($address['status'] == 0) {
        $da['distanc']=$address['result']['0']['distance']['text'];
        $da['time']=$address['result']['0']['duration']['text'];
        return $da;
    } else {
       throw new \Exception('百度地圖:'.$address['message']);
    }
}

六,短信
短信可能使用夢網(wǎng)科技或者阿里大于
面向接口開發(fā)$smsSendConn是夢網(wǎng)的短信類庫或者阿里的短信類庫,看官方文檔就可以

try {
    $result = $smsSendConn->singleSend($data);
    return true;
}catch (Exception $e) {
    //$e->getMessage()
    return false;
}

感謝這些組件代碼的作者

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末小压,一起剝皮案震驚了整個濱河市掸掸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盾沫,老刑警劉巖叭莫,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冤今,死亡現(xiàn)場離奇詭異,居然都是意外死亡桥状,警方通過查閱死者的電腦和手機帽揪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辅斟,“玉大人转晰,你說我怎么就攤上這事。” “怎么了查邢?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵蔗崎,是天一觀的道長。 經(jīng)常有香客問我扰藕,道長缓苛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任邓深,我火速辦了婚禮未桥,結果婚禮上,老公的妹妹穿的比我還像新娘芥备。我一直安慰自己冬耿,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布萌壳。 她就那樣靜靜地躺著亦镶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袱瓮。 梳的紋絲不亂的頭發(fā)上缤骨,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音懂讯,去河邊找鬼荷憋。 笑死台颠,一個胖子當著我的面吹牛褐望,可吹牛的內容都是我干的。 我是一名探鬼主播串前,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼瘫里,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荡碾?” 一聲冷哼從身側響起谨读,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坛吁,沒想到半個月后劳殖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拨脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年哆姻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玫膀。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡矛缨,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情箕昭,我是刑警寧澤灵妨,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站落竹,受9級特大地震影響泌霍,放射性物質發(fā)生泄漏。R本人自食惡果不足惜筋量,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一烹吵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桨武,春花似錦肋拔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至性誉,卻和暖如春窿吩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背错览。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工纫雁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倾哺。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓轧邪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羞海。 傳聞我的和親對象是個殘疾皇子忌愚,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)却邓,斷路器硕糊,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1、一個打包工具 2腊徙、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,642評論 0 16
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架简十,建立于...
    Hsinwong閱讀 22,353評論 1 92
  • 許是因為小時候太愛吃零食了,加上對口腔的護理不甚勤勉撬腾,牙齒一直都不是太好螟蝙,早些年的時候,年紀輕輕就已走上補牙...
    魏昊霖閱讀 593評論 2 2
  • 文\岑庚涪 如果世界上還有比寫作是更加光榮神圣事情时鸵,我覺得除了寫作之外胶逢,應該沒有厅瞎。對于寫作的人來說,就是光榮神的事...
    葉涅夫閱讀 391評論 4 3