安装
Wondows 平台
Wondows 平台上,我们只需要下载 Composer-Setup.exe
后,一步步安装即可。
需要注意的是你需要开启 openssl
配置,我们打开 php
目录下的 php.ini
,将 extension=php_openssl.dll
前面的分号去掉就可以了。
安装成功后,我们可以通过命令窗口(cmd) 输入 composer --version
命令来查看是否安装成功。
Linux 或 Mac OS 平台
可以使用以下命令来安装:
$ php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
$ php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 1.6.5) successfully installed to: /root/composer.phar
Use it: php composer.phar
$ php -r "unlink('composer-setup.php');"
$ mv composer.phar /usr/local/bin/composer
准备
本地工作区创建文件夹 red-packets
,初始化项目,生成composer.json文件。
步骤
$ mkdir red-packets
$ cd red-packets
$ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [canren/red-packets]: canren/red-packets
Description []: red packets
Author [canren <sxffind@126.com>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:
{
"name": "canren/red-packets",
"description": "red packets",
"authors": [
{
"name": "canren",
"email": "sxffind@126.com"
}
],
"require": {}
}
Do you confirm generation [yes]?
步骤解释
$ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
// 1. 输入项目命名空间
// 注意<vendor>/<name> 必须要符合 [a-z0-9_.-]+/[a-z0-9_.-]+
Package name (<vendor>/<name>) [dell/htdocs]: yourname/projectname
// 2. 项目描述
Description []: 这是一个测试
// 3. 输入作者信息,可以直接回车
Author [canren <sxffind@126.com>, n to skip]:
// 4. 输入最低稳定版本,stable, RC, beta, alpha, dev
Minimum Stability []: dev
// 5. 输入项目类型,
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
// 6. 输入授权类型
License []:
> Define your dependencies.
// 7. 输入依赖信息
Would you like to define your dependencies (require) interactively [yes]?
// 如果需要依赖,则输入要安装的依赖
Search for a package: php
// 输入版本号
Enter the version constraint to require (or leave blank to use the latest version): >=5.4.0
// 如需多个,则重复以上两个步骤
// 8. 是否需要require-dev,
Would you like to define your dev dependencies (require-dev) interactively [yes]?
// 操作同上
{
"name": "guanguans/uploadfile",
"description": "一个通用文件上传包",
"type": "library",
"require": {
"php": ">=5.4"
},
"require-dev": {
"php": ">=5.4"
},
"license": "MIT",
"authors": [
{
"name": "guanguans",
"email": "yzmguanguan@gmail.com"
}
],
"minimum-stability": "dev"
}
// 9. 是否生成composer.json
Do you confirm generation [yes]? yes
添加自动加载
在上一步生成的composer.json
中追加:
"autoload": {
"psr-4": {
"redPackets\\": "src/redPackets"
}
}
构建项目
新建文件
新建src/redPackets/redPackets.php文件。
├─red-packets
│ ├─src
│ │ ├─redPackets
│ │ ├─redPackets.php
│ └─composer.json
<?php
namespace redPackets;
use Exception;
/**
* Created by PhpStorm.
* User: canren
* Date: 17-8-14
* Time: 下午3:56
*/
class redPackets
{
//兜底钱数,起码为1,单位是分
public $basicsMoney = 1;
//剩余红包个数
public $remainSize;
//剩余红包钱数,单位是分
public $remainMoney;
/**
* 红包代码
* redPackets constructor.
*/
function run()
{
try {
//红包总个数
if (0 >= $this->remainSize) {
throw new Exception('{"isError":1, "message":"红包个数应该大于0个"}');
}
//判断红包金额是否比红包个数大
if ($this->remainSize > $this->remainMoney || $this->remainMoney < $this->basicsMoney * $this->remainSize) {
throw new Exception('{"isError":1, "message":"红包金额应该比红包个数多"}');
}
//红包个数
$remainSize = $this->remainSize - 1;
//封顶红包
$max = ($this->remainMoney - $this->basicsMoney * $this->remainSize) / $this->remainSize * 2;
//随机取红包钱数
$money = intval(rand(0, 100) * $max / 100);
//随机取红包钱数+加上保底红包
$money += $this->basicsMoney;
$money = 0 == $remainSize ? $this->remainMoney : $money;
//剩余钱数 (红包个数为0时 剩余钱数直接分配)
$remainMoney = 0 == $remainSize ? 0 : $this->remainMoney - $money;
//红包
$result = [
'isError' => 0,
'info' => [
'remainSize' => $remainSize, //红包剩余个数
'remainMoney' => $remainMoney, //红包剩余钱数
'redPacketsMoney' => $money //当前红包个数
]
];
return json_encode($result);
} catch (Exception $e) {
echo $e->getMessage();
}
}
/**
* 初始化红包
* @param int $basicsMoney 兜底的红包金额
* @param int $money 红包的钱数
* @param int $size 红包的个数
* @param array $redPacketsMoney
* @return array
*/
public function redPacketsInit($basicsMoney, $money, $size, &$redPacketsMoney = [])
{
$redPackets = new redPackets();
$info = $redPackets->setBasicsMoney($basicsMoney)
->setRemainMoney($money)
->setRemainSize($size)
->run();
$info = json_decode($info, true);
$redPacketsMoney[] = $info['info']['redPacketsMoney'];
if (0 != $info['info']['remainSize']) {
$this->redPacketsInit($basicsMoney, $info['info']['remainMoney'], $info['info']['remainSize'], $redPacketsMoney);
}
return $redPacketsMoney;
}
/**
* 设置红包最少钱数 单位是分
* @param $basicsMoneyMoney 最少钱数 默认为1分 大于0
* @return $this
*/
public function setBasicsMoney($basicsMoney)
{
$this->basicsMoney = $basicsMoney ? intval($basicsMoney) : $this->basicsMoney;
return $this;
}
/**
* 剩余红包个数
* @param $remainSize 剩余红包个数
* @return $this
*/
public function setRemainSize($remainSize)
{
$this->remainSize = intval($remainSize);
return $this;
}
/**
* 剩余红包钱数
* @param $remainSize 剩余红包钱数
* @return $this
*/
public function setRemainMoney($remainMoney)
{
$this->remainMoney = intval($remainMoney);
return $this;
}
}
测试
新建examples/demo.php文件。
<?php
require_once __DIR__ . '/../autoload.php';
use redPackets\redPackets;
$redPackets = new redPackets;
$redPacketsData = $redPackets->redPacketsInit(1, 200000, 200);
var_dump($redPacketsData);
完善
添加 README.md、LICENSE、.gitignore等文件,项目最终结构如下:
├─red-packets
│ ├─examples
│ │ ├─demo.php
│ ├─src
│ │ ├─redPackets
│ │ ├─redPackets.php
│ ├─.gitignore
│ ├─composer.json
│ ├─LICENSE
│ └─README.md
推送到 GitHub
将本地包推送至github。
发布
将 GitHub 上的包提交到 Packagist。
1.首先要在 Packagist 上注册账号并登录(可以用 GitHub 直接登录)。
2.点击顶部导航条中的 Summit 按钮。
3.在输入框中输入 GitHub 上的刚才包地址,如:https://github.com/canren/red-packets。
4.然后点击 Check 按钮 Packagist 会去检测此仓库地址的代码是否符合 Composer 的 Package 包的要求。
检测正常的话,会出现 Submit 按钮,再点击一下 Submit 按钮,我们的包就提交到 Packagist 上了。
自动更新
上面提交上的包提交的包,当我们更新 GitHub 仓库时,Packagist 上面的的包并不会自动更新,现在我们来设置一下自动更新。
1.复制 Profile API Token
2.打开 GitHub
项目 setting
,选择 Integrations & services
,添加 packagist service
,点击 Test service
验证是否已经自动更新:
移步
Packagist
包主页,发现已经没有了红色的圈住的提示,说明设置自动更新成功。
使用
composer require canren/red-packets
相关链接
原文地址:https://segmentfault.com/a/1190000013947602
包地址:https://github.com/canren/red-packets
本文由 feng 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2020-11-25 00:00:00