环境:Windows  64位
PHP 版本:5.5.
框架:ThinkPHP 3.2.

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

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

使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件的更多相关文章

  1. Unity2D项目-平台、解谜、战斗! 1.5 Player框架、技能管理组件

    各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 前文提到,凡是有"攻击"语义的对象,在游戏中,我们给予其一个"CanFight"组件予 ...

  2. 一个类似ThinkPHP的Node.js框架——QuickNode

    QuickNode Node.js从QuickNode开始,让restful接口开发更简单! PHP的MVC 作为一名曾经的PHP开发者,我也有过三年多的thinkphp使用经验,那是我学习PHP接触 ...

  3. MUI框架-08-窗口管理-创建子页面

    MUI框架-08-窗口管理-创建子页面 之前写过这一篇,不知道为什么被删了,我就大概写了,抱歉 创建子页面是为了,页面切换时,外面的页面不动,让 MUI 写出来的页面更接近原生 app 官方文档:ht ...

  4. Spring 框架的事务管理

    1. Spring 框架的事务管理相关的类和API PlateformTransactionManager 接口: 平台事务管理器(真正管理事务的类); TransactionDefinition 接 ...

  5. Fineui往框架添加选项卡的方法

    在主页F.ready(function (){...}方法中添加js代码 // 添加示例标签页 window.addExampleTab = function (id, url, text, icon ...

  6. Django框架 之 admin管理工具(组件使用)

    Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...

  7. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  8. Spring框架之事务管理

    Spring框架之事务管理 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败. 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致性:指事务前后 ...

  9. Ant Design框架中不同的组件访问不同的models中的数据

    Ant Design框架中不同的组件访问不同的models中的数据 本文记录了我在使用该框架的时候踩过的坑,方便以后查阅. 一.models绑定 在某个组件(控件或是页面),要想从某个models中获 ...

随机推荐

  1. poj 1170

    很高兴,这道题刚编译成功提交就AC了. 简单的多重背包,标算估计是5.6维动规.其实可以通过6进制压成一维.判定是一个特价方式是否可行只需自己推一下就行了,很简单(对应位上的数目标不小于特价所需条件) ...

  2. ecshop二次开发常用文件位置

    语言包修改: /language/zh_cn/admin/common.php 商品详情页模板: /themes/**/goods.dwt  (最下方有changePrice() 点选属性或改变数量时 ...

  3. css div上下左右居中

    相信大家都会遇到这样的问题,要求一个块上下左右居中,在这里我总结了几个好用的方法 1.已知要居中的块width height 假设  content 要在f里上下左右居中 <div class= ...

  4. ios显示或隐藏导航栏的底线

    根据产品需求要求把这个界面导航栏的底线去掉,下个控制器还需要有底线. 使用下面的代码实现 //在页面出现的时候就将黑线隐藏起来 -(void)viewWillAppear:(BOOL)animated ...

  5. TFS二次开发系列:一、TFS体系结构和概念

    TFS是Team Fundation Server的简称,是微软VSTS的一部分,它是Microsoft应用程序生命周期管理(ALM)工具的核心协作平台,简单的说它是管理和开发软件项目的整个生命周期的 ...

  6. PHP操作数据库

    一.PHP连接到MySQL // //比较规范的写法是地址,登录名,密码这样写,比较安全 define("DB_HOST", 'localhost'); define('DB_US ...

  7. ImageView的scaleType详解

    ImageView的ScaleType详 1. 网上的误解 不得不说很失望,到网上搜索了几篇帖子,然后看到的都是相互复制粘贴,就算不是粘贴的,有几篇还是只是拿着自己的几个简单例子,然后做测试,这种以一 ...

  8. 计算机网络中的帧封装(C实现)

    这段时间开始复习计算机网络,看到帧封装这一节,结合以前的课程设计,就用C写了个帧封装的程序,说实话C学的确实不怎么样,实现的时候对于文件操作那部分查了好多资料,下面说说帧封装是啥情况. 学过计算机网络 ...

  9. __cdecl 、__fastcall、__stdcall

    调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数 ...

  10. SpringBoot实战配置

    http://blog.csdn.net/sun_t89/article/details/51944252 http://www.cnblogs.com/kreo/p/4423362.html