ThinkPHP(3.2.3)使用 Composer 为框架添加和管理组件

admin2017-07-202135

测试使用 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 命令下载组件

 

此时组件已经被安装到了项目中:


网友评论