创建一个空的laravel项目

composer create-project --prefer-dist laravel/laravel pkg
在新建的 laravel 项目中建立如下目录 qiangzhiwang\testpkg\src,packages 目录和 app 目录同级。我们开发包的代码都放在这个 src 目录中,qiangzhiwang和 testpkg完全自定义。
mkdir -p packages/qiangzhiwang/testpkg/src

修改项目composer.json设定 PSR-4 命名空间

"psr-4": {
"App\\": "app/",
"Qiangzhiwang\\Testpkg\\" : "packages/qiangzhiwang/testpkg/src"
},

进入命令行执行composer dump-autoload将autoload重新生成一次

composer dump-autoload

在qiangzhiwang/testpkg/src目录下书写一个简单的Md5Hasher类

<?phpnamespace Qiangzhiwang\Testpkg;/**
* Class Md5Hasher
* @package Qiangzhiwang\Testpkg
*/class Md5Hasher{
/**
* @param $value
* @param array $options
* @return string
*/
public function make($value, array $options =[])
{
$salt = isset($options['salt']) ? $options['salt'] :"";
return hash('md5',$value . $salt);
}
/**
* @param $value
* @param $hashValue
* @param array $options
* @return bool
*/
public function check($value , $hashValue , array $options=[])
{
$salt = isset($options['salt']) ? $options['salt'] :"";
return hash('md5',$value . $salt) === $hashValue;
}
}

接下来就是怎么把这个类融入到laravel容器中

php artisan make:provider Md5HasherProvider

执行完以上命令后,会在app/Providers目录下生成Md5HasherProvider.php将此文件移动到packages/qiangzhiwang/testpkg/src目录下

mv app/Providers/Md5HasherProvider.php packages/qiangzhiwang/testpkg/src/Md5HasherProvider.php

移动完成之后,要进行简单的修改以及完成容器注册

<?php
namespace Qiangzhiwang\Testpkg;
use Illuminate\Support\ServiceProvider;
class Md5HasherProvider extends ServiceProvider{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
} /**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
$this->app->singleton("md5hash",function (){
return new Md5Hasher();
});
}
}

在config/app.php文件中,providers数组中最后一行添加上

'providers' => [

    /*
* Application Service Providers...
*/
.......
\Qiangzhiwang\Testpkg\Md5Hasher::class
],

测试使用

php artisan tinker
>>> app("md5hash")->make("")
=> "e10adc3949ba59abbe56e057f20f883e"

发布包提供给其他开发者下载,需要进入packages/qiangzhiwang/testpkg进行操作

composer init

然后通过git工具发布到github上,并同步https://packagist.org上,方可进行composer进行安装使用

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处

开发 Laravel 扩展的基本流程的更多相关文章

  1. 如何开发 Laravel 扩展包并发布到 Composer

    如何开发 Laravel 扩展包并发布到 Composer  发布于 2019-01-22 cxp1539  1074 Vie   开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...

  2. 如何开发、本地测试、发布 Laravel 扩展包?

    如何开发.本地测试.发布 Laravel 扩展包?  Laravel/ 1年前/  4022 /  11   现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...

  3. 基于Composer的Laravel扩展包开发工作流 ,实现laravle项目的文件管理(记录成长)

    PHP Composer包开发 基于Composer的Laravel扩展包开发工作流 实现laravle项目的文件管理,添加文件/文件夹,删除文件,查看代码/文件(代码支持缩进,支持语法高亮) com ...

  4. 【转】下载量最高的 100 个 Laravel 扩展包推荐

    说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现 ...

  5. 使用 Composer 安装Laravel扩展包的几种方法

    使用 Composer 安装Laravel扩展包的几种方法 以下的三种方法都是需要你在项目的根目录运行 第一种:composer install 如有 composer.lock 文件,直接安装,否则 ...

  6. 如何有效地开发 Jmix 扩展组件

    扩展组件的概念在使用 Jmix 框架开发中扮演着非常重要的角色.我们将在本文探索什么是扩展组件以及 Jmix Studio 在扩展组件开发和应用程序模块化方面能给开发者带来什么帮助. Jmix 中的扩 ...

  7. 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单   手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...

  8. Sublime Text 前端开发常用扩展插件推荐

    Sublime Text 前端开发常用扩展插件推荐 Sublime Text Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能 更重要的是,Sublime Text ...

  9. 【翻译】我钟爱的Visual Studio前端开发工具/扩展

    原文:[翻译]我钟爱的Visual Studio前端开发工具/扩展 怎么样让Visual Studio更好地编写HTML5, CSS3, JavaScript, jQuery,换句话说就是如何更好地做 ...

随机推荐

  1. [java] 笔记 from黑马

    1. 关于String的创建.   PS:String的底层是用字节数组来实现的. 2.字符串常量池的笔记 具体指向是如下图的, 注意看0x666和0x999这两个地址. 3.原因如下: 4. 5. ...

  2. Linux运维利器之ClusterShell

    一.简介 实验室机房有大概百台的服务器需要管理,加上需要搭建Hadoop以及Spark集群等,因此,一个轻量级的集群管理软件就显得非常有必要了.经过一段时间的了解以及尝试,最终选择了clustersh ...

  3. pat 1006 Sign In and Sign Out(25 分)

    1006 Sign In and Sign Out(25 分) At the beginning of every day, the first person who signs in the com ...

  4. nyoj 50-爱摘苹果的小明 (比较)

    50-爱摘苹果的小明 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:10 submit:15 题目描述: 小明家的院子里有一棵苹果树,每到秋天树上就 ...

  5. convert svn repo to git

    https://john.albin.net/git/convert-subversion-to-git 1. 抓取Log 在linux 上做的,其余是在win上做的. 2. svn co svn:/ ...

  6. 菜鸟系列Fabric源码学习 — peer节点启动

    Fabric 1.4 源码分析peer节点启动 peer模块采用cobra库来实现cli命令. Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, ...

  7. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  8. 今天是python专场UDP socket 链接

    type = SOCK_DGRAM UDP 协议的通信优势 允许一个服务器的同时和多个客户端通信 server import socket sk = socket.socket(type=socket ...

  9. 批量更新Linux文件后缀名

    #!/bin/bash#Create_Time 2019-08-06#use: small_wei #查找并,批量修改文件后缀 #后缀为 .txt 修改为 .log find /opt -name & ...

  10. Java多线程——锁

    Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...