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 命令下载组件

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

  • 相关阅读:
    gridview展示行号
    DateEdit如果开启Vista模式并显示日期+时间模式
    DevExpress GridView 添加和设置右键菜单
    C# WinForm实现粘贴图片到PictureBox及复制PictureBox中的图片
    dll反编译工具(ILSpy)的使用
    Dev的双击Gridview的DoubleClick
    SQL Server日期时间格式转换字符串详解
    LabelControl文本居中显示
    C# winform 判断click事件点击的是左键还是右键
    Winform窗体状态的判断及调用打开的窗体的方法
  • 原文地址:https://www.cnblogs.com/frankiephp/p/7280934.html
Copyright © 2011-2022 走看看