使用 Composer 爲 ThinkPHP(3.2.3)框架添加和管理組件

環境:Windows 10 64位
PHP 版本:5.5.12
框架:ThinkPHP 3.2.3

Tips:php

組件:打包的代碼,能夠是一系列相關的類(class)、接口(interface)、特性(trait),用於解決某個具體的問題。組件中的類、接口、特性一般放在同一個命名空間中。thinkphp

Packagist:https://packagist.org/,該網站收集 PHP 組件,能夠在上面查找項目中須要的組件。ThinkPHP 在該站的地址爲:https://packagist.org/packages/topthink/thinkphpjson

Composer:Composer 是 PHP 組件的依賴管理器,在命令行中運行,經過運行命令能夠下載組件(以及組件的依賴)而且把組件(以及組件的依賴)自動加載到項目中。composer

 

安裝 Composer

Composer 官網地址:https://getcomposer.org/,中文鏡像地址:http://www.phpcomposer.com/框架

Windows 版下載地址:https://getcomposer.org/download/ide

下載安裝包並安裝:oop

若是安裝不成功且提示:測試

The openssl extension is missing, which will reduce the security and stability of Composer. If possible you should enable it or recompile php with --with-openssl

則須要將 php.ini 中 extension=php_openssl.dll 前面的註釋取消。網站

 

當安裝成功後,程序會自動關把安裝路徑添加到系統的環境變量,打開環境變量能夠看到:ui

所以在 cmd 命令提示符下能夠直接執行 composer 命令:

若是看到這個畫面則說明安裝成功了。

 

準備框架

測試使用 ThinkPHP(3.2.3) 框架(也能夠使用 Laravel、Yii 等其餘現代框架)。初始化的框架根目錄中,有一個 composer.json 文件:

{
    "name": "topthink/thinkphp",
    "description": "the ThinkPHP Framework",
    "type": "framework",
    "keywords": ["framework","thinkphp","ORM"],
    "homepage": "http://thinkphp.cn/",
    "license": "Apache2",
    "authors": [
        {
            "name": "liu21st",
            "email": "liu21st@gmail.com"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "minimum-stability": "dev"
}

PHP 組件中必需要有 composer.json 文件。Composer 會使用該文件中的信息查找、安裝和自動加載 PHP 組件。

其中:

name 表示該組件的 廠商名(最頂層命名空間)和包名(字命名空間),格式是 "name": "vendor/package",vendor 表示最頂層命名空間,package 表示字命名空間

require 表示該組件依賴的組件

一會安裝了其餘組件以後能夠看看該文件的變化。

 

安裝組件

在 ThinkPHP 項目中安裝一個錯誤與異常的組件 Whoops,地址:https://packagist.org/packages/filp/whoops

項目下的 composer require filp/whoops 就是該組件在 Composer 下的安裝命令。

該組件的做用是若是 PHP 腳本中觸發了錯誤和沒有捕獲的異常,則出現 Whoops 的診斷頁面。

 

在命令提示符下進入項目目錄:

 

執行命令 composer require filp/whoops

看到以上提示說明組件安裝完成,此時查看項目目錄,發如今根目錄下會多一個 vendor 目錄:

組件 Whoops 就位於 Vendor/filp 目錄下。

 

此時再看根目錄下 composer.json 文件:

項目的依賴組件中多了 Whoops 組件,版本是 2.1

 

測試組件

在 Application/Home/Controller 下建立 TestController.class.php 文件。首先測試系統捕獲異常時的輸出:

<?php
/**
 * Created by PhpStorm.
 * User: dee
 * Date: 2016/8/6
 * Time: 12:44
 */
namespace Home\Controller;
use Think\Controller;

class TestController extends Controller {
    public function index() {
        try {
            $this->division(10, 0);
        } catch(\Exception $e) {
            echo $e->getMessage();
        }
    }

    function division($dividend, $divisor) {
        if($divisor == 0) {
            throw new \Exception('Division by zero');
        }
    }
}

輸出:

 

而後測試不加載 Whoops 組件,腳本遇到未捕獲異常時的提示:

<?php
/**
 * Created by PhpStorm.
 * User: dee
 * Date: 2016/8/6
 * Time: 12:44
 */
namespace Home\Controller;
use Think\Controller;

class TestController extends Controller {
    public function index() {
        // 測試未捕獲的異常
        $this->division(10, 0);

    }

    function division($dividend, $divisor) {
        if($divisor == 0) {
            throw new \Exception('Division by zero');
        }
    }
}

訪問:http://127.0.0.3/php/composer/thinkphp/Home/Test

輸出:

 

 

最後測試加載了 Whoops 組件,而且腳本遇到未捕獲的異常時的輸出:

<?php
/**
 * Created by PhpStorm.
 * User: dee
 * Date: 2016/8/6
 * Time: 12:44
 */
namespace Home\Controller;
use Think\Controller;

class TestController extends Controller {
    public function index() {
        // 使用composer自動加載器
        require $_SERVER['DOCUMENT_ROOT'].__ROOT__.'/vendor/autoload.php';

        // 設置Whoops提供的錯誤和異常處理
        $whoops = new \Whoops\Run;
        $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
        $whoops->register();

        // 測試未捕獲的異常
        $this->division(10, 0);
    }

    function division($dividend, $divisor) {
        if($divisor == 0) {
            throw new \Exception('Division by zero');
        }
    }
}

輸出:

 

測試結束。

 

安裝組件的另外一種方式

在 composer.json 文件中加入組件包:

例如添加組件 monolog

 

而後使用 composer update 命令下載組件

 

此時組件已經被安裝到了項目中:

相關文章
相關標籤/搜索