如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer
我们来做一个根据第一个字符或者汉字生成头像的laravel扩展包。其实原理就是我们自己去写一个服务提供者,把服务提供者配置到app/providers数组中。
1.第一步现在自己项目中跟目录创建packages/cxp/avatar/src
2.修改 composer.json
"psr-4": {
"App\\": "app/",
"Cxp\\Avatar\\": "packages/cxp/avatar/src/"
}
执行composer dumpautoload
src 目录创建 Avatar.php 具体代码
/**
* Created by PhpStorm.
* User: mac
* Date: 2019-01-10
* Time: 14:06
*/
namespace Cxp\Avatar;
use Illuminate\Config\Repository;
class Avatar {
protected $config;
/**
* 构造方法
*/
public function __construct(Repository $config)
{
$this->config = $config->get('avatar');
}
/**
* 生成图像
* @return resource 图片资源
*/
private function generate($name)
{
// 创建图片资源
$img_res = imagecreate($this->config['width'], $this->config['height']);
// 背景颜色
$bg_color = imagecolorallocate($img_res, mt_rand(120, 190), mt_rand(120, 190), mt_rand(120, 190));
// 文字颜色
$font_color = imagecolorallocate($img_res, mt_rand(190, 255), mt_rand(190, 255), mt_rand(190, 255));
// 填充背景色
imagefill($img_res, 1, 1, $bg_color);
// 计算文字的宽高
$pos = imagettfbbox($this->config['size'], 0, $this->config['font_file'], mb_substr($name, 0, 1));
$font_width = $pos[2] - $pos[0] + 0.32 * $this->config['size'];
$font_height = $pos[1] - $pos[5] + -0.16 * $this->config['size'];
// 写入文字
imagettftext($img_res, $this->config['size'], 0, ($this->config['width'] - $font_width) / 2, ($this->config['height'] - $font_height) / 2 + $font_height, $font_color, $this->config['font_file'], mb_substr($name, 0, 1));
return $img_res;
}
/**
* 输出图片(默认输出到浏览器,给定输出文件位置则输出到文件)
* @param string|false $path 保存路径
*/
public function output($name, $path = false)
{
$img_res = $this->generate($name);
// 确定输出类型和生成用的方法名
$content_type = 'image/' . $this->config['type'];
$generateMethodName = 'image' . $this->config['type'];
// 确定是否输出到浏览器
if (!$path) {
header("Content-type: " . $content_type);
$generateMethodName($img_res);
} else {
$generateMethodName($img_res, $path);
}
// 释放图片内存
imagedestroy($img_res);
}
}
- 再src下创建config 目录来存取我们的配置参数文件如config/avatar.php
/**
* Created by PhpStorm.
* User: mac
* Date: 2019-01-10
* Time: 14:28
*/
return [
'type' => 'png', // jpeg|png|gif|bmp
'width' => '100',
'height' => '100',
'size' => '26',
'font_file' => public_path() . '/fonts/WawaSC-Regular.otf',
];
- 在src创建AvatarProvider.php即服务提供者。供ioc容器注册
namespace Cxp\Avatar;
use Illuminate\Support\ServiceProvider;
class AvatarProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
// 发布配置文件
$this->publishes([
__DIR__.'/config/avatar.php' => config_path('avatar.php'),
]);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('avatar', function ($app) {
return new Avatar($app['config']);
});
}
}
- 如果想使用门脸,可以在src目录下创建Facades目录,提供门脸
namespace Cxp\Avatar\Facades;
use Illuminate\Support\Facades\Facade;
class Avatar extends Facade
{
protected static function getFacadeAccessor()
{
return 'avatar';
}
}
使用扩展包
到此我们开发就完成了,那改怎么使用了。
- 先发布配置文件在config目录下面
php artisan vendor:publish
- 在app/config目录注册我们的服务提供者和门脸类
'providers' => [
Cxp\Avatar\AvatarProvider::class,
]
'aliases' => [
'Avatar' => Cxp\Avatar\Facades\Avatar::class,
]
- 程序中使用
Avatar::output('赵','zhao.png');
发布扩展包
1.在avatar目录执行composer init,生成composer.json
{
"name": "cxp/laravel-avatar",
"description": "laravel avatar",
"license": "MIT",
"authors": [
{
"name": "cxp1539",
"email": "457714145@qq.com"
}
],
"autoload": {
"psr-4": {
"Cxp\\Avatar\\": "src"
}
},
"require": {}
}
2.在github创建个项目,将avatar目录的代码推送到github上。
3.打开https://packagist.org/ 注册个账号,提交git的地址就可以了。
如何开发 Laravel 扩展包并发布到 Composer的更多相关文章
- 如何开发、本地测试、发布 Laravel 扩展包?
如何开发.本地测试.发布 Laravel 扩展包? Laravel/ 1年前/ 4022 / 11 现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...
- 基于Composer的Laravel扩展包开发工作流 ,实现laravle项目的文件管理(记录成长)
PHP Composer包开发 基于Composer的Laravel扩展包开发工作流 实现laravle项目的文件管理,添加文件/文件夹,删除文件,查看代码/文件(代码支持缩进,支持语法高亮) com ...
- 【转】下载量最高的 100 个 Laravel 扩展包推荐
说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现 ...
- 使用 Composer 安装Laravel扩展包的几种方法
使用 Composer 安装Laravel扩展包的几种方法 以下的三种方法都是需要你在项目的根目录运行 第一种:composer install 如有 composer.lock 文件,直接安装,否则 ...
- 如何正确使用 Composer 安装 Laravel 扩展包
我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...
- laravel 安装 Laravel 扩展包
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...
- 如何开发一个npm包并发布到npm中央仓库
转自: https://liaolongdong.com/2019/01/24/publish-public-npm.html 如何开发一个npm包并发布到npm中央仓库需求背景:平时在项目工作中可能 ...
- 基于Composer的Laravel扩展包开发工作流
使用场景 在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库:并且自己的其他项目也有需求引用自定义的第三方包:甚至自己会发布修改后的第三方包: 读完本文你讲获得: Git Submo ...
- laravel扩展包开发步骤总结
1. 创建包 php artisan workbench vendor/package --resources 注: vendor:开发商名 package:包名 2.修改下包里co ...
随机推荐
- [Selenium] The commonly used operation of element
btnLogin.click(); //Click element SeleniumUtil.jsClick(driver, saveButtonEl); //If click() ...
- C#:目录
ylbtech-C#:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cn ...
- .NETFramework:Cache
ylbtech-.NETFramework:Cache 1.返回顶部 1. #region 程序集 System.Web, Version=4.0.0.0, Culture=neutral, Publ ...
- 如何在XCode中更改iPhone或iPad模拟器类型
如何在XCode中更改iPhone或iPad模拟器类型 参考方法一(永久,一旦设置后,每次运行指定的模拟器):(1)选择顶层菜单Project 中的 Set Active Executable(2)根 ...
- SPOJ FIBOSUM && FIBOSUM2
Fibonacci数列定义为 $$f_n = f_{n-1}+f_{n-2}, \text{以及初值}f_0=0, f_1=1.$$ 本文之讨论,皆在模$10^9+7$意义下. FIBOSUM 给定$ ...
- 035--MySQL基本操作
一.数据库的定义及相关名词解释 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以 ...
- POJ1236【图的前连通(缩点)】
题意: 1.初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件. 2.至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件. ...
- P5169 xtq的异或和(FWT+线性基)
传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张 ...
- Electron开发
[Debug] 1)cmd进入项目所在根目录,输入: $ npm install --save-dev devtron$ npm install --save electron-debug 2)在主j ...
- .NET Core 跨平台物联网开发:连接阿里云IOT(一)
系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四) SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...