很多PHP朋友可能听说过PSR规范和composer,但不知道如何制作一个composer包,并发布到composer包管理中心packagist上,这里以一个实际项目为例来讲述下。
一、准备工作
- 申请github账号
- 已经安装git
- 已经安装composer
- 在github上创建一个仓库,注意仓库名建议使用-连接单词,如php-document-creator,不能使用驼峰法,如phpDocumentCreator,github并没有这个限制,但packagist上面有这个限制。
二、开始工作
1、将github上面刚创建的项目克隆到本地,如我的项目地址为:http://github.com/shixinke/php-document-creator
#克隆项目到本地
git clone git@github.com:shixinke/php-document-creator.git
#进入项目目录
cd php-document-creator
#配置git账户
git config --local user.name "shixinke"
git config --local user.email "ishixinke@qq.com"
2、使用composer初始化项目
composer init
根据提示填写(或者手动生成也可),生成一个composer.json的文件,内容如下:
{
"name": "shixinke/php-document-creator",
"description": "a document creator for php extension",
"type": "library",
"repositories": [
{
"url" : "http://github.com/shixinke/php-document-creator"
}
],
"homepage":"http://www.shixinke.com",
"license": "Apache 2.0",
"authors": [
{
"name": "shixinke",
"email": "ishixinke@qq.com",
"homepage" : "http://www.shixinke.com"
}
],
"require": {
"php" : ">=5.3.0"
},
"autoload":{
"psr-4":{
"phpDocumentCreator\\":"/src/phpDocumentCreator"
}
}
}
值得注意的几点:
- name这个一定要使用-来分割单词,不能使用驼峰法,否则没法通过packagilst的命名规则
- require用来指定依赖的环境或类库包
- autoload指定自动加载的规则,psr-4表示使用PSR-4的规范
“phpDocumentCreator\“:”/src/phpDocumentCreator”表示在使用phpDocumentCreator这个命名空间时,其实访问的路径是 /src/phpDocumentCreator
3、建立目录规范
详情说明请参照:http://www.php-fig.org/psr/psr-4/
PSR-4的目录规范为:
|-vendor/
|-vendor_name/
package_name/
src/
ClassName.php # 具体的类
tests/
ClassNameTest.php # 测试类文件
我们使用github,那么vendor_name和package_name就已经确定了,如我的vendor_name即为shixinke,package_name为php-document-creator,所以我们只需要培养src和tests两个文件夹
src/
phpDocumentCreator
Tool.php
Document.php
Transform.php
tests/
docTest.php
注:这里的phpDocumentCreator这个目录可有可无
4、功能实现
这里以Tool.php为例
<?php
namespace phpDocumentCreator;
class Tool
{
public static function getName()
{
return "Tool";
}
}
建立一个自动加载类库的文件:
根目录下建立:Autoloader.php
<?php
defined('ROOT_PATH') or define('ROOT_PATH', dirname(__DIR__));
spl_autoload_register(function($class){
$prefix = 'phpDocumentCreator\\';
$baseDir = ROOT_PATH . '/src/';
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
//$relativeClass = substr($class, $len);
$file = $baseDir . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
建立测试文件tests/docTest.php
<?php
define('ROOT_PATH', dirname(__DIR__));
require_once ROOT_PATH.'/Autoloader.php';
echo \phpDocumentCreator\Tool::getName()
5、写说明文件README.md
主要是项目说明、用法等,使用markdown语法
这个文件在项目的根目录
三、发布代码
1、把代码先发布到github上:
git add .
git commit -m "代码更新"
git push
2、在packagist上注册账号,有github账号可以直接登录。
验证不通过一般有以下几个原因:
github地址不合法,一般认为github的用户名为vendor_name,不能使用驼峰,项目名称为package_name,也不能使用驼峰
composer.json文件不合法
验证通过后,就可以看到相应的页面,如:
https://packagist.org/packages/shixinke/php-document-creator