<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ThinkPHP 簡單強大, 但提供的功能畢竟還是有限的. 好在在開源世界為我們提供了取之不竭的資源, 恰到好處地使用第三方資源, 可以大大降低我們的開發成本, 節約開發時間. 幾乎所有流行的語言, 都有自己的包管理工具, 方便用戶之間自由分享自己的成功, 促進社區的共同繁榮. Python 有pip, Ruby有gem, NodeJs有npm ... PHP 有 Composer. 通過它, 你可以輕松將其他人已經發布到 packagist.org 的 composer 包集成到自己的項目中. 當安裝了一個composer包之后, 包提供的類和函數在你的項目中都立即可用! 記住: 你越善于使用前人的成果, 你就可以比別人跑的更快, 站得更高, 看的更遠. 人類的科技進步史, 已經證明了這點, 積極擁抱composer, 拒絕等于落后. * Composer 官網: https://getcomposer.org/ * Packgist 官網: https://packgist.org/ 接下來, 我要介紹幾個有用的composer包, 讓我們從問題開始: ## 問題: 環境隔離 真實世界的開發往往是這樣, 多個團隊成員共同開發, 線上線下的代碼通過版本控制系統保持一致. 但你無法保證也沒理由要求所有機器上的應用配置一致. 例如,要求所有成員使用相同的本地數據庫用戶名和密碼是不合理的. 線上線下使用相同的數據庫配置更加不合理. 我們有很多種方式避免這種問題, 一種常見的方法是, 將配置文件重命名為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文件, 相互之間就實現了環境隔離. * GitHub項目地址: https://github.com/snowair/think-dotenv.git ## 問題: 日志管理 開發階段的日志管理很簡單, 甚至很多人認為不重要. 但生產環境中, 如果你輕視日志管理, 代價可能是巨大的. 日志記錄了應用的歷史, 歷史可以詔示未來. 分析海量日志, 你可以得出很多很重要的信息, 這些信息可以幫助你提升性能,避免瓶頸,及時擴容,發現攻擊,修補漏洞.... 但TP的日志功能, 非常簡單, 也許無法擔當重任. 試想一下, 當你發展到需要十臺服務器在負載均衡下運行應用時, 你該如何管理你的日志? 或者, 線上代碼出現了隨機偶發性的問題, 本地幾乎不可能重現這些問題,你該如何捕捉信息? 還有很多情況,需要有一個趁手的日志工具幫助你解決問題. monolog是 Packgist上最流行的日志庫, 在 composer 約7萬余個包中, 它的安裝量排名第一. 它也是symfony和laravel默認集成的日志庫. 它之所以流行, 在于它功能豐富可以滿足各種層次的需要,而且易于集成至其他系統,并且簡單好用. **think-monolog** 包完成了將monolog集成至TP的工作, 所以在TP項目中, 你只需要這樣使用: ``` composer require snowair/think-monolog:dev-master ``` 代碼中: ``` \Snowair\Think\Logger::debug('這是一條debug日志'); ``` * GitHub項目地址: https://github.com/snowair/think-monolog.git ### 問題: 單元測試 你的項目越復雜龐大, 可能約需要單元測試. 為獨立的類寫單元測試是件輕松愉快的事情, 但為存在耦合的類寫單元測試就不那么爽快了. 因此, 如果要實施單元測試, 您的代碼需要寫的適合做單元測試. 但有些情景,你可能無能為力: 在TP中, 你的控制器類必須繼承`Think\Controller`類,你的模型類必須繼承`Think\Model`類. 而這兩個類中相當的邏輯, 與TP的生命周期密切耦合. 要測試它們, 你首先需要模擬出應用的執行過程, 創建出它們所需要的那些耦合的元素, 否則它們無法正常執行. 所以, 大多情況, 我們會忽略對這倆種類的測試或只做有限的測算. **think-phpunit** 的目標是幫助你對控制器和模型類做完整測試, 并且將這一過程簡單化. 首先, 為了讓phpunit能載入你的類, 你必須修改項目的 composer.json: ``` { "name": "公司名/項目名", "autoload": { "classmap": ["Application","ThinkPHP/Library"] } } ``` 然后安裝: ``` composer require 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) ``` 就是如此輕松. * GitHub項目地址: https://github.com/snowair/think-phpunit.git 在本節的結束, 再介紹兩個包, 或許您會喜歡: * twig for TP, GitHub項目地址: https://github.com/snowair/think-twig.git * whoops for TP, GitHub項目地址: https://github.com/snowair/think-whoops.git
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看