composer組件化開發,個人總結

組件
只提供單一功能,不和其他功能產生耦合
復用性強,一般放在公共模塊,別的模塊都可以使用
注意:
1.簡單的功能,自己封裝一個組件,不要使用第三方.第三方組件的代碼冗余,學習成本,掌控程度都沒有自己寫好.
2.使用合適的第三方組件,可以節約大量時間
3.結合業務提前做好設計,例如使用策略模式.
4.盡量不要直接使用組件,自己在封裝一次,因為組件是可能更換,面向功能開發,
一,支付組件
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      訂單數據
 * @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狀態:
  $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);
        // 取得總行數
        $highestRow = $sheet->getHighestRow();

        // 取得總列數
        $highestColumn = $sheet->getHighestColumn();
        ++$highestColumn;
       //循環讀取excel文件,讀取一條,插入一條
        $data=array();
        //從第二行開始讀取數據
        for($j=2;$j<=$highestRow;$j++){
            //從A列讀取數據
            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']);
    }
}

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

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

感謝這些組件代碼的作者

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1、一個打包工具 2、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,699評論 0 16
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,504評論 1 92
  • 許是因為小時候太愛吃零食了,加上對口腔的護理不甚勤勉,牙齒一直都不是太好,早些年的時候,年紀輕輕就已走上補牙...
    魏昊霖閱讀 614評論 2 2
  • 文\岑庚涪 如果世界上還有比寫作是更加光榮神圣事情,我覺得除了寫作之外,應該沒有。對于寫作的人來說,就是光榮神的事...
    潘父禮閱讀 401評論 4 3