laravel5.5开发composer扩展包
1. 下载laravel框架,并命名(framework)
composer create-project --prefer-dist laravel/laravel framework "5.4.*"
2. 创建相关目录
app同级目录创建packages文件夹,然后依照下面目录层次创建文件夹,文件可以稍后创建
目录层次如下:
|
|—— packages
| |—— archerwong
| |—— larapackage 实际我们开发包的根目录
| |—— src
| |—— ArcherWong
| |—— LaraPackage
| |—— LaraPackage.php 定义facades
| |—— LaraPackageProvider.php 定义服务提供者
| |—— MoreAction.php 定义服务提供者提供的各种服务
| |—— Controllers
| |—— IndexController.php 和下面的包路由配合,实现控制器--路由联动
| |—— views 视图文件夹
| |—— message.blade.php
| |—— welcome.blade.php
| |—— routes.php 包路由
| |—— composer.json
3. 项目根目录下的composer.json文件中声明命名空间
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"ArcherWong\\LaraPackage\\":"packages/archerwong/larapackage/src/"
}
},
注意:重新生成autoload文件 ,命令:composer dump-autoload
4. 在包的根目录(packages/archerwong/larapackage)下创建composer.json文件
填入下面内容
{
"name": "archer-wong/larapackage",
"description": "how to develop a laravel package",
"license": "MIT",
"authors": [
{
"name": "archer-wong",
"email": "wong_chiu@163.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=5.6.4"
},
"autoload": {
"psr-0": {
"ArcherWong\\LaraPackage": "src/"
}
}
}
注意:根据自己的需要增加依赖等。。。
5. 各种文件中的内容
5.1 facades文件:LaraPackage.php,这样可以方便的访问IOC容器中注册的类。
文件内容如下
<?php
namespace ArcherWong\LaraPackage;
use Illuminate\Support\Facades\Facade;
class LaraPackage extends Facade
{
public static function getFacadeAccessor()
{
//return 的字符串会在相应的provider中使用
return 'larapackage';
}
}
5.2 定义服务提供者:在该文件夹下创建LaraPackageProvider.php
内容如下
<?php
namespace ArcherWong\LaraPackage;
use Illuminate\Support\ServiceProvider;
class LaraPackageProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//注册扩展包视图,并起个名字,方便我们调用该文件夹下的视图
$this->loadViewsFrom(__DIR__.'/../../views','LaraPackageView');
//注册扩展包路由,使用php artisan route:list 命令可以查看是否生效
$this->loadRoutesFrom(__DIR__.'/../../routes.php');
//可以将相应的资源(不仅限于views文件夹)发布到laravel项目的某个位置,下面将views文件夹放到了我们常用的视图文件夹下
$this->publishes([
__DIR__.'/../../views'=>base_path('resources/views/vendor/lara-package'),
]);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//这里使用到了facades中的字符串
$this->app->singleton('larapackage',function(){
//我们可以通过facades的aliase访问下面的MoreAction
//会在config的app.php文件中进行服务提供者和别名的注册
return $this->app->make('ArcherWong\LaraPackage\MoreAction');
});
}
}
5.3 创建MoreAction.php文件
文件内容如下:
<?php
namespace ArcherWong\LaraPackage;
class MoreAction
{
public function getInfo()
{
$user_ip = $_SERVER["REMOTE_ADDR"];
$time = date('Y-m-d H:i:s');
return ['user_ip' => $user_ip, 'time' => $time];
}
}
注意:以下内容和上面有个分割,上面其实已经实现一个包最简单的功能,以上只是返回一个包含ip和时间的数组,开发您的脑洞,当然可以实现各种复杂功能。
在控制器中:
利用门面获得 LaraPackage::getInfo();
返回包中的视图 return view('LaraPackageView::welcome',['data' => $data]);
在视图中:
@include('LaraPackageView::message')
下面内容是为了演示laravel包开发中的控制器,路由,视图的开发。
5.4 controller文件夹下创建IndexController.php
<?php
namespace ArcherWong\LaraPackage\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\View;
use LaraPackage;
class IndexController extends BaseController
{
public function index() {
//$data = 'Hello World';
$data = LaraPackage::getInfo();
//可以直接使用创建的包里的视图,注意调用是两个冒号
return view('LaraPackageView::welcome',['data' => $data]);
}
}
5.5 视图文件
1> welcome.blade.php文件
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Laravel</title>
</head>
<body>
<!--可以直接引入视图中的其他文件-->
@include('LaraPackageView::message')
<div>
您的ip地址是:{{ $data['user_ip'] }}
</div>
<div>
当前时间是:{{ $data['time'] }}
</div>
</body>
</html>
2> message.blade.php 文件
<div>
<div>
<div>学习laraval扩展包开发</div>
</div>
</div>
5.6 routes.php
<?php
//包中路由配置文件
Route::get('hello','ArcherWong\LaraPackage\Controllers\IndexController@index');
$ vim welcome.blade.php
6. 将包发布到github和packagist上
1> 首先创建一个github项目
拿到对应的仓库地址 :git@github.com:archer-wong/larapackage.git
2> 然后进入packages/archerwong/larapackage文件夹下(也就是我们开发的包的根目录),将包内容上传到github
git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:archer-wong/larapackage.git
git push -u origin master
3>去仓库的setting => Intergrations&services添加Packagist同步服务,


此时需要你的packagist的账号信息,所以我们先进入https://packagist.org(使用github账号登录,免去麻烦),找到右上角的submit按钮,输入我们刚上传包的github仓库地址,进行check验证

审核通过后,类似如下,记下包的packagist地址https://packagist.org/packages/archer-wong/larapackage

然后继续我们的github和packagist的自动同步设置
用户信息,请填写账号,不要写邮箱地址
进入个人信息可以拿到token信息
domain地址填写刚拿到的包packagist地址
此时我们的版本是dev-master

引入的方法是 composer require archer-wong/larapackage “dev-master" 不加版本会报错
如果后期有人提出了一些issues你去修改了自己的package
那么我们会去增加别的tag 也是就是说你修改package之后 再去添加一个tag:
git tag -a 0.1.1 -m 'first version'
填写说明信息后 推送这个tag:
git push origin --tags
参考资料
https://segmentfault.com/a/1190000009069449
https://d.laravel-china.org/docs/5.4/packages#public-assets
https://d.laravel-china.org/docs/5.4/providers
https://d.laravel-china.org/docs/5.4/facades
laravel5.5开发composer扩展包的更多相关文章
- laravel框架应用和composer扩展包开发
laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,laravel框架思想前卫,跟随时代潮 ...
- 如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer 发布于 2019-01-22 cxp1539 1074 Vie 开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...
- laravel composer 扩展包开发(超详细)
laravel composer 扩展包开发(超详细) 置顶 2018年02月05日 11:09:16 Simael__Aex 阅读数:10396 版权声明:转载请注明出处:http://blo ...
- 正确的 Composer 扩展包安装方法
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...
- Laravel5中通过SimpleQrCode扩展包生成二维码实例
Simple Qrcode是基于强大的Bacon/BaconQrCode库开发的针对Laravel框架的封装版本,用于在Laravel中为生成二维码提供接口. 安装SimpleQrCode扩展包 在项 ...
- 【转】正确的 Composer 扩展包安装方法
简单解释 composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖: composer update - 从 c ...
- Composer 扩展包安装方法
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...
- laravel5.3安装redis扩展包
1,编辑 laravel 根目录下的 composer.json 文件: "require": { "php": ">=5.6.4", ...
- 如何开发、本地测试、发布 Laravel 扩展包?
如何开发.本地测试.发布 Laravel 扩展包? Laravel/ 1年前/ 4022 / 11 现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...
随机推荐
- MySql 8.0.11 在win10下的zip非安装配置
在win10使用mysql8.0.11的zip包进行配置时,搜到的教程很多坑,特此总结成功配置的方法. 1.下载非安装的zip包 mysql 8.0.11 64位 2.解压zip包 将下载的zi ...
- ubuntu 显示隐藏文件
原文链接 http://blog.csdn.net/happyjiahan/article/details/6023496 方法1.使用命令ls -a显示所有的文件,包括隐藏文件 方法2.在桌面化操作 ...
- April 3 2017 Week 14 Monday
Don't worry about finding your soul mate. Find yourself. 欲寻佳侣,先觅本心. You may fail to find your soul m ...
- 【js基础修炼之路】— null和undefined的区别
在近期的复习期间遇到null和nudefined,于是通过查找资料,想写一篇文章来说明他们的区别.. javaScript高级程序设计: 在使用var声明变量但未对其加以初始化时,这个变量的值就是un ...
- I2C总线协议学习笔记 (转载)
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL. SDA传输数据是大端传输,每次传输8bit,即一字节. 支持多主控(multimastering),任何时间点只能有一 ...
- 如何用代码填充S/4HANA销售订单行项目的数量字段
我的任务是用代码生成S/4HANA销售订单(Sales Order)的行项目,并且填充对应的quantity(数量)值. 最开始我用了下面的代码,把quantity的值写入item字段target_q ...
- 【UOJ83】【UR #7】水题出题人(提交答案题)
点此看题面 大致题意: 给你若干份排序的代码,共\(6\)个子任务,每个子任务让你构造数据使得一份代码用时在给定的\(T\)以内,另一份代码用时超过\(2000000\). 子任务\(1\):归并排序 ...
- python 爬图片
学了两天python,语法慢慢熟悉吧,数据结构都没写过. 写了一个爬图片的小东西.挺有意思的.都是女神照 (✿◡‿◡) 用的是正则表达式, ''' 符号: . 匹配任意字符,\n除外 * 匹配前一个字 ...
- Zabbix 2.4安装部署
目 录 第1章 Zabbix Server安装... 1 1.1 Zabbix Server环境... 1 1.2 Zabbix Server软件... 1 1.3 Zabbix server配置. ...
- 2.NBU管理NetBackup
2管理NetBackup2.1NetBackup作业任务监视 NetBackup任务监视器可以监视备份.恢复和归档任务的状态,也可以监视NetBackup本身数据库的备份. 2.1.1Activity ...