zoukankan      html  css  js  c++  java
  • 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件

     

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

    Tips:

    组件:打包的代码,可以是一系列相关的类(class)、接口(interface)、特性(trait),用于解决某个具体的问题。组件中的类、接口、特性通常放在同一个命名空间中。

    Packagist:https://packagist.org/,该网站收集 PHP 组件,可以在上面查找项目中需要的组件。ThinkPHP 在该站的地址为:https://packagist.org/packages/topthink/thinkphp

    Composer:Composer 是 PHP 组件的依赖管理器,在命令行中运行,通过运行命令可以下载组件(以及组件的依赖)并且把组件(以及组件的依赖)自动加载到项目中。

    安装 Composer

    Composer 官网地址:https://getcomposer.org/,中文镜像地址:http://www.phpcomposer.com/

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

    下载安装包并安装:

    如果安装不成功且提示:

    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 前面的注释取消。

    当安装成功后,程序会自动关把安装路径添加到系统的环境变量,打开环境变量可以看到:

    因此在 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 HomeController;
    use ThinkController;
    
    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 HomeController;
    use ThinkController;
    
    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 HomeController;
    use ThinkController;
    
    class TestController extends Controller {
        public function index() {
            // 使用composer自动加载器
            require $_SERVER['DOCUMENT_ROOT'].__ROOT__.'/vendor/autoload.php';
    
            // 设置Whoops提供的错误和异常处理
            $whoops = new WhoopsRun;
            $whoops->pushHandler(new WhoopsHandlerPrettyPageHandler);
            $whoops->register();
    
            // 测试未捕获的异常
            $this->division(10, 0);
        }
    
        function division($dividend, $divisor) {
            if($divisor == 0) {
                throw new Exception('Division by zero');
            }
        }
    }
    复制代码

    输出:

    测试结束。

    安装组件的另一种方式

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

    例如添加组件 monolog

    然后使用 composer update 命令下载组件

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

  • 相关阅读:
    Oracle 按一行里某个字段里的值分割成多行进行展示
    Property or method "openPageOffice" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by
    SpringBoot 项目启动 Failed to convert value of type 'java.lang.String' to required type 'cn.com.goldenwater.dcproj.dao.TacPageOfficePblmListDao';
    Maven 设置阿里镜像
    JS 日期格式化,留作参考
    JS 过滤数组里对象的某个属性
    原生JS实现简单富文本编辑器2
    Chrome控制台使用详解
    android权限(permission)大全
    不借助第三方网站四步实现手机网站转安卓APP
  • 原文地址:https://www.cnblogs.com/frankiephp/p/7280934.html
Copyright © 2011-2022 走看看