介绍
在Laravel
中就有Laravel Composer Package开发的相关介绍 这其中需要运用 Service Providers 当然对于我们Laravel
开发人员
来说 开发一个扩展包还是很值得学习的 现在就来开发一个消息通知的扩展包
扩展包的地址:https://github.com/GeekGhc/LaraFlash
整个
package
参照Jeffrey Way
的Flash Packages
新建包
在生成好的Laravel
项目中新建packages
目录(和app
同级) 接着在packages
目录下新建包目录 packages/geekghc/laraflash
我们需要去laravel
项目下去声明包的命名空间:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"GeekGhc\\LaraFlash\\":"packages/geekghc/laraflash/src/"
}
},
声明完毕之后别忘了去执行重新生成autoload
文件
$ composer dump-autoload
我们需要新建src
目录来存放我们的源文件
接着因为我们是开发一个扩展包 之后还需要进行测试开发 所以我们去生成一个composer.json
文件
$ composer init
填写完基本信息之后 在packages/geekghc/laraflash
目录下就会生成一个composer.json
文件:
我先给出
{
"name": "geekghc/flash",
"description": "flash for laravel",
"license": "MIT",
"authors": [
{
"name": "GeekGhc",
"email": "ghcgavin@sina.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=5.5.9",
},
"require-dev": {
"phpunit/phpunit": "~5.7",
"mockery/mockery": "0.9.*"
},
"autoload": {
"psr-0": {
"GeekGhc\\LaraFlash": "src/"
},
"files": [
"src/GeekGhc/LaraFlash/function.php"
]
}
}
完成好composer.json
后 我们可以去src/GeekGhc/LaraFlash
目录下新建一个Flash.php
<?php
namespace GeekGhc\LaraFlash;
use Illuminate\Support\Facades\Facade;
class Flash extends Facade
{
public static function getFacadeAccessor()
{
return 'laraflash';
}
}
我们这里继承了Facade
类,用Facades
可以访问IoC
容器中注册的类 这样我们就可以去调用注册的类
同时我们需要去新建一个Service Provider
$ php artisan make:provider FlashProvider
将生成的 app/Providers/FlashProvider.php
文件移动到我们的 packages/geekghc/laraflash/src/GeekGhc/LaraFlash/
目录下面,并注册 FlashProvider
到 config/app.php
在FlsahProvider
里面我们去写一下之后我们需要绑定的类:
public function register()
{
$this->app->bind(
'GeekGhc\LaraFlash\SessionStore',
'GeekGhc\LaraFlash\LaravelSessionStore'
);
$this->app->singleton('laraflash',function(){
return $this->app->make('GeekGhc\LaraFlash\FlashNotifier');
});
}
这边我们就绑定了封装好的SessionStore
之后我们去配置一下视图的路径
public function boot()
{
$this->loadViewsFrom(__DIR__.'/../../views','laraflash');
$this->publishes([
__DIR__.'/../../views'=>base_path('resources/views/vendor/laraFlash'),
]);
}
这里我们就发布了我们的视图文件 如果在项目里去执行
$ php artisan vendor:publish
我们就可以在resources/views/vendor/laraFlash
去自定义自己需要的样式效果
接着在config/app.php
去注册我们的服务
'providers' => [
GeekGhc\LaraFlash\MyFlashProvider::class,
];
为了方便使用 可以再去添加一个alias
'aliases' => [
'LaraFlash'=>GeekGhc\LaraFlash\Flash::class,
];
接着我们可以去实现flash
的主要功能服务 每个包的功能都根据需求而来 这里也不多做介绍
最后的目录结构是这样的
|
|—— packages
| |—— geekghc
| |—— laraflash
| |—— src 源文件
| |—— GeekGhc 源文件
| |—— LaraFlash
| |—— Flash.php
| |—— FlashNotifier.php
| |—— function.php
| |—— FlashProvider.php
| |—— SessionStore.php
| |—— LaravelSessionStore.php
| |—— views 视图文件
| |—— tests 测试目录
| |—— vendor 测试需要的包
| |—— .gitignore
| |—— composer.json
| |—— composer.lock
| |—— phpunit.xml
| |—— readme.md
这样的话 我们就在本地写好了扩展包 我们其实可以去创建一个控制器去测试我们这个包是否正常
在视图home.blade.php
我们就可以去包含views
里面的视图文件
@include('laraflash::notification')
或者
@include('laraflash::header-notification')
接着在控制器去使用类似这样的形式:
LaraFlash::success('Message')
LaraFlash::info('Message')
LaraFlash::error('Message')
LaraFlash::warning('Message')
包的具体使用去GeekGhc/LaraFlash看一下具体使用就知道了
最后的效果大概就是这样的:
显示正常之后我们就可以去发布我们的package
了
在github
先创建一个仓库 当然我这里的就是创建了LaraFlash
这个远程仓库
紧接着我们去推好我们的代码到github
接着我们需要去仓库的setting
=> Intergrations&services
添加Packagist
服务(填写好用户名和Token
)
添加完毕之后去Packagist Submit
这个仓库(提供远程仓库的地址)
在github
进入packagist
测试通过之后就ok了
因为我们之前定义的dev版本 如果后期有人提出了一些issues
你去修改了自己的package
那么我们会去增加别的tag
也是就是说你修改package
之后 再去添加一个tag
:
$ git tag 2.0 -a
填写说明信息后 推送这个tag
:
$ git push --tags
这样一来我们就发布了v2.0这个版本 这就是我们发布扩展包大概流程
博客文章地址Laravel Package
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。