1. 程式人生 > >ThinkPHP開發必備composer擴充套件包

ThinkPHP開發必備composer擴充套件包

本文介紹幾個有助於提高開發效率和質量的ThinkPHP專用composer包, 它們都是packgist上最流行的composer包為與ThinkPHP進行無縫整合而特別封裝. 安裝後, 無需修改框架原始碼, 無需或僅需修改一下配置檔案, 便立即可用.

本文假設讀者有能力正常使用composer

環境隔離 dotenv

真實世界的開發往往是這樣, 多個團隊成員共同開發, 線上線下的程式碼通過版本控制系統保持一致.
但你無法保證也沒理由要求所有機器上的應用配置一致. 例如,要求所有成員使用相同的本地資料庫使用者名稱和密碼是不合理的.
線上線下使用相同的資料庫配置更加不合理.

我們有很多種方式避免這種問題, 一種常見的方法是, 將配置檔案重新命名為config.example.php, 然後在每個部署的環境再重新命名為config.php,並在分發時排除這個檔案.
這種方法很容易實現,但缺點是他是靜態的. 每當你增加了一項配置, 或者減少了一項配置, 都需要告訴別人手動處理config.php. 否則, 它的程式可能無法正常執行.

通過專門的環境配置區分不同的部署環境,是另一種被廣泛採用的方案. 它的原理很簡單: 不同的部署環境中, 需要區別的配置往往非常有限, 所有將config.php納入版本控制或者分發包中更合理.
這樣config.php有變化時,其他環境中的應用可以第一時間更新. 那有限的幾個有環境有關配置, 往往都是諸如資料庫配置這種必不可少的. 將它們單獨隔離出來更加合理. 通常, 實施這種方案會把
隔離的配置放在一個名為.env

的檔案中. 因此這種方案, 稱為 DotEnv.

Packgist.org 中的 php-dotenv 是一個非常棒的包, 很適合與TP整合. think-dotenv 包已經完成了整合, 所以你可以拿來就用:

composer require snowair/think-dotenv:dev-master

修改 Common/Conf/tags.php

return array( 'app_init'=>array( 'Snowair\Think\Behavior\HookAgent' ) )

在專案根目錄下建立.env 檔案, 配置內容以 key=value 的格式逐行書寫,例如:

DB_HOST=localhost
DB_NAME=test
DB_USER=root
DB_PWD=root

這樣, 應用執行時, 上面四項配置將生效覆蓋config.php中的配置. 不同的部署環境, 只需要建立自己的.env檔案, 相互之間就實現了環境隔離.

全功能日誌 monolog

開發階段的日誌管理很簡單, 甚至很多人認為不重要. 但生產環境中, 如果你輕視日誌管理, 代價可能是巨大的. 日誌記錄了應用的歷史, 歷史可以詔示未來.
分析海量日誌, 你可以得出很多很重要的資訊, 這些資訊可以幫助你提升效能,避免瓶頸,及時擴容,發現攻擊,修補漏洞….

但TP的日誌功能, 非常簡單, 也許無法擔當重任. 試想一下, 當你發展到需要十臺伺服器在負載均衡下執行應用時, 你該如何管理你的日誌?
或者, 線上程式碼出現了隨機偶發性的問題, 本地幾乎不可能重現這些問題,你該如何捕捉資訊? 還有很多情況,需要有一個趁手的日誌工具幫助你解決問題.

monolog是 Packgist上最流行的日誌庫, 在 composer 約7萬餘個包中, 它的安裝量排名第一. 它也是symfony和laravel預設整合的日誌庫. 它之所以流行, 在於它功能豐富可以滿足各種層次的需要,而且易於整合至其他系統,並且簡單好用.

think-monolog 包完成了將monolog整合至TP的工作, 所以在TP專案中, 你只需要這樣使用:

composer requrie snowair/think-monolog:dev-master

程式碼中:

\Snowair\Think\Logger::debug('這是一條debug日誌');

敏捷利器 phpunit

你的專案越複雜龐大, 可能約需要單元測試. 為獨立的類寫單元測試是件輕鬆愉快的事情, 但為存在耦合的類寫單元測試就不那麼爽快了.

因此, 如果要實施單元測試, 您的程式碼需要寫的適合做單元測試. 但有些情景,你可能無能為力: 在TP中, 你的控制器類必須繼承Think\Controller類,你的模型類必須繼承Think\Model類. 而這兩個類中相當的邏輯, 與TP的生命週期密切耦合.

要測試它們, 你首先需要模擬出應用的執行過程, 創建出它們所需要的那些耦合的元素, 否則它們無法正常執行. 所以, 大多情況, 我們會忽略對這倆種類的測試或只做有限的測算.

think-phpunit 的目標是幫助你對控制器和模型類做完整測試, 並且將這一過程簡單化.

首先, 為了讓phpunit能載入你的類, 你必須修改專案的 composer.json:

{
  "name": "公司名/專案名",
  "autoload": {
    "classmap": ["Application","ThinkPHP/Library"]
  }
}

然後安裝:

composer requrie snowair/think-phpunit:dev-master

接下來,我建立了一個 ./test/IndexControllerTest.php 測試類:

<?php
class IndexControllerTest extends PhpUnit
{

    static public function setupBeforeClass()
    {
        // 下面四行程式碼模擬出一個應用例項, 每一行都很關鍵
        parent::$app = new \Think\PhpunitHelper();
        parent::$app->setMVC('domain.com','Home','Index');
        parent::$app->setTestConfig(['DB_NAME'=>'test', 'DB_HOST'=>'127.0.0.1',]); 
        parent::$app->start();
    }

    public function testIndex()
    {
        $output = $this->execAction('index');
        $this->assertEquals('hello world',$output);
    }
}

然後執行:


$ vendor/bin/phpunit test/IndexControllerTest.php 
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.

.

Time: 139 ms, Memory: 7.00Mb

OK (1 test, 1 assertion)

就是如此輕鬆.

優雅模板 Twig引擎

相比ThinkPHP內建的Think模板引擎, Twig引擎擁有更優雅的語法, IDE的對其支援更好. 並且,使用獨立的Twig引擎開發模板有助於未來的移植: 當專案決定遷移至Laravel或Symfony時, 模板可以原封不動的保留.

composer require snowair/think-twig:dev-master

引擎配置:

/* Twig模板引擎設定 */
'TMPL_ENGINE_TYPE'      =>  'Twig',      // 設定為Twig啟用twig引擎
'TMPL_TEMPLATE_SUFFIX'  =>  '.html',     // 設定模板字尾, 可自由設定ACTION_NAME之間的分割符

做完上面的配置, twig就生效了

優雅異常 Whoops

當系統丟擲異常, 我們需要一個工具, 立即在頁面顯示出異常棧的全過程,Whoops是這方面做的最好的工具.

composer require snowair/think-whoops:dev-master
  • 在 Common/Conf/tags.php 增加一個行為,如果之前已經新增過,就不用再添加了:

    return array(
    'app_init'=>array(
    'Snowair\Think\Behavior\HookAgent'
    ),
    )

就是這麼簡單, whoops立即生效了!

相關推薦

ThinkPHP開發必備composer擴充套件

本文介紹幾個有助於提高開發效率和質量的ThinkPHP專用composer包, 它們都是packgist上最流行的composer包為與ThinkPHP進行無縫整合而特別封裝. 安裝後, 無需修改框架原始碼, 無需或僅需修改一下配置檔案, 便立即可用.

laravel composer 擴充套件開發(超詳細)

原文章寫在自己的部落格: http://blog.share345.com/2018/02/05/laravel-package-development.html 文章適用於laravel 包開發,當然如果你理解著完成一遍,就可以發現他也適用於 compose

正確的 Composer 擴充套件安裝方法

問題說明 我們經常要往現有的專案中新增擴充套件包,有時候因為文件的錯誤引導,如下圖來自 這個文件 的: composer update 這個命令在我們現在的邏輯中,可能會對專案造成巨大傷害。 因為 composer update 的邏輯是按照 comp

正確的 Composer 擴充套件安裝方法composer install 和update、require

問題說明 我們經常要往現有的專案中新增擴充套件包,有時候因為文件的錯誤引導,如下圖來自 這個文件 的: composer update 這個命令在我們現在的邏輯中,可能會對專案造成巨大傷害。 因為 composer update 的邏輯是按照 composer.

ktolin開發android的擴充套件android-ktx

android-ktx是谷歌剛剛開源的使用kotlin開發android的擴充套件包,它的目的是為了讓使用kotlin開發android更簡潔。目前只是釋出的預覽版本。可以體驗一下,預覽版說明以後的api可能會稍微變動變。 android-ktx 目前支援的元

Yii2-PHP擴充套件開發詳解教程

在擴充套件包開發開始之前 ,先不要著急動手,先讓我們一塊來了解了解下面關於PHP擴充套件包的基礎知識。 (1)什麼是擴充套件包,他的作用是什麼?有什麼優點? (2)擴充套件由那幾部分構成? (3)你的擴充套件包是解決什麼問題的?考慮擴充套件性,後面的持續迭代,根據你的經

10個Laravel4開發人員必用擴充套件

                Laravel是一個新的基於最新PHP版本語法,支援IoC等設計模式的快速開發框架。目前最新版本為4.2,推薦安裝PHP版本5.5+。本文列舉10個基本軟體包,都是開發人員使用Laravel框架來構建WEB應用過程中應該要用到的,無需自己重複構建,如認證、除錯、網站優化。程式碼

laravel 開發專用擴充套件

說明 Laravel 有一些擴充套件包是開發環境中專用(例如 Generators 擴充套件包),生產環境中並不會使用到,為了避免無用的負載, 必須嚴格控制其安裝和載入。 安裝 安裝開發專用擴充套

通過composer安裝擴充套件時,提示[Composer\Exception\NoSslException]

在安裝位置通過命令列,開啟composer 安裝擴充套件包時提示 報錯 [Composer\Exception\NoSslException] The openssl extension is required for SSL/TLS protection but is not av

laravel5.6開發擴充套件-針對雲通訊簡訊功能,開發服務provider

先貼出地址,回頭詳細記錄 github地址:https://github.com/ghoiufyia/laravel-package-yuntongxun.git packageist地址:https://packagist.org/packages/shangning/

Ubuntu16.04下使用lnmp軟體搭建開發環境安裝擴充套件pdo_pgsql擴充套件報錯Can't find the 'libpq-fe.h header

1.安裝pgsql擴充套件[email protected]:~/lnmp1.4/src/php-7.1.15/ext/pgsql$ phpize Configuring for: PHP Api Version: 20160303 Zend Mo

前端開發必備!Emmet使用手冊

++ value 表達 ive 運行時 row net 能夠 com 介紹 Emmet (前身為 Zen Coding) 是一個能大幅度提高前端開發效率的一個工具: 基本上,大多數的文本編輯器都會允許你存儲和重用一些代碼塊,我們稱之為“片段”

thinkphp開發規範

內存 描述 控制結構 清晰 用戶輸入 開頭 過程 剔除 scrip 1、編寫目的 ????為了更好的提高技術部的工作效率,保證開發的有效性和合理性,並可最大程度的提高程序代碼的可讀性和可重復利用性,指定此規範。開發團隊根據自己的實際情況,可以對本規範進行補充或裁減

前端到後臺ThinkPHP開發整站(3)

reac add ets data struct -a tle min ons   繼續我的這個項目的第三晚的開發了,時間比較少,今晚寫的代碼不多,今晚仍然是造輪子寫一個公共的控制器和一個公共的JS。直接上代碼吧!   以下是一個公共的控制器,後臺控制器都繼承於它,構造函數

前端到後臺ThinkPHP開發整站(5)

進度 get git avs 技術分享 rto md5加密 -c exit   今天周五了,這個項目做了五個晚上了,明天周末不用上班有一整天的時間來結束這個項目了,今晚主要把後臺界面給弄出來了。   大概的整個後臺界面就是這個樣子了,接下來的工作就是搬磚了,一個個菜單功能填

swift開發必備技巧static和class的使用

wota mtu static tk1 ntc html www mda swift開發 %E4%BB%80%E4%B9%88%E6%98%AF%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91 http://www.zcool.com.cn/col

Eclipse開發必備快捷鍵

eclipse的基本認識 eclipse基本設置 eclipse文件相關常用的快捷鍵 編寫代碼時常用的快捷鍵 查看源碼時常用� 1、Eclipse的基本認識:Eclipse是Java以及JavaEE開發的IDE(integreated Development Environm

HTML5開發必備的工具

可視化 字體 初級 快捷 封裝 工具包 平臺 系列 定位   現在除了移動APP開發之外,比較火的就是html5開發了,現階段的HTML5被看做是Web開發者創建流行web應用的利器,增加了對視頻和Canvas2D的支持,它的優點就是可以跨平臺使用,比如你是開發一個HTML

HTML5開發必備h5牛牛源碼帶控

頂點 表格 時也 功能 cti 如果 拖拽 設計 免費 HTML5開發必備-h5牛牛源碼帶控源碼合集h5.hxforum.com 聯系方式170618633533企鵝2952777280源碼出售 房卡出售 後臺出租有意者私聊扣扣 這些資源對你應該有所幫助Q:29527772

composer常用

圖片 http 常用 請求 image 數字 pre 數據庫操作 mage 用途 包名 安裝 項目生成器 or