实战-基于laravel的rbac扩展包的开发与发布
前提
在项目发开过程中经常会更换不同的框架,每次在使用新的框架的同时,虽然已经有很多基于后台权限的二次封装,但是除了基础权限外,会新增很多额外的功能,有时候这些额外的功能会给实际业务带来一定的困扰,剔除又很麻烦,基于这点,一个干净的后台权限扩展包本人觉得还是很有必要的
以下是开发、发布的全过程,记录一下,方便后期梳理和学习
准备工作
要开发扩展包,就要先了解laravel扩展包的相关内容,可参考:[laravel扩展包开发]
创建扩展包目录
在项目中创建packages文件夹,与app目录同级
| - app
| - packages
| - - - bennent
| - - - - - geauth
| - - - - - - - src
...
初始化package包
// 进入geauth目录下,执行
composer init
// 具体配置项可自行搜索
初始化完成后,会出现composer.json文件,与src同级
// composer.json
{
"name": "bennent/geauth",
"description": "xxxx",
"keywords": [
"xxx"
],
"license": "MIT",
"require": {
}
}
注意:composer中字段信息要根据自己的扩展包填写
配置: composer.json
// 进入项目根目录。在comgposer.json(注意!!!此json为项目的composer),加载扩展包
"autoload": {
"psr-4": {
"App\\": "app/",
"Bennent\\Geauth\\": "packages/bennent/geauth/src"
}
},
执行:composer dump-autoload
服务容器
-
创建服务容器 php artisan make:provider GeauthServiceProvider
-
转移服务容器和修改
// 将刚创建好的app\provider\GeauthServiceProvider 移动到packages\bennent\geauth\src下 // 注意修改命名空间 /** *以下为本人扩展包相关逻辑 大家可参考 */ namespace Bennent\Geauth; use Bennent\Geauth\Console\GeauthCommand; use Illuminate\Support\ServiceProvider; class GeauthServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // // register our controller $this->app->make('Bennent\Geauth\Controllers\HelloWorldController'); $this->app->make('Bennent\Geauth\Controllers\AdminBaseController'); $this->app->make('Bennent\Geauth\Controllers\LoginController'); $this->app->make('Bennent\Geauth\Controllers\IndexController'); $this->app->make('Bennent\Geauth\Controllers\PermissionController'); //注册视图 $this->loadViewsFrom(__DIR__.'/views', 'geauth'); } /** * Bootstrap services. * * @return void */ public function boot() { // 注册辅助函数 require_once(__DIR__ . '/helpers.php'); // 注册命令 if ($this->app->runningInConsole()) { $this->commands([ GeauthCommand::class ]); } //注册路由 $this->loadRoutesFrom(__DIR__ . '/routes.php'); //数据迁移 $this->loadMigrationsFrom(__DIR__ . '/database/migrations'); //注册发布文件 $this->registerPublishes(); } /** * @notes:发布资源 * @user: Bennent_G */ protected function registerPublishes() { $this->publishes([ //发布配置文件 __DIR__ . DIRECTORY_SEPARATOR . 'config' => config_path(), //发布静态文件 __DIR__ . DIRECTORY_SEPARATOR . 'public' => public_path('geauth'), //发布辅助函数 __DIR__ . DIRECTORY_SEPARATOR . 'helpers.php' => app_path('helpers.php'), ]); } }
-
服务注册
// config\app.php
'provider' => [
...
Bennent\Geauth\GeauthServiceProvider::class,
]
- Facades注解
// src\Facades\Geauth.php
namespace Bennent\Geauth\Facades;
use Illuminate\Support\Facades\Facade;
class Geauth extends Facade
{
protected static function getFacadeAccessor()
{
return 'Geauth';
}
}
- 发现扩展包
// packages\bennent\geauth\composer.json
// 增加如下内容
"extra": {
"laravel": {
"providers": [
"Bennent\\Geauth\\GeauthServiceProvider"
],
"aliases": {
"geauth": "Bennent\\Geauth\\GeauthFacade"
}
}
}
创建路由
packages\bennent\geauth\src\routes.php
use Illuminate\Support\Facades\Route;
// 测试demo
Route::get('admin/hello', 'Bennent\Geauth\Controllers\HelloWorldController@hello');
注释
至此扩展包demo已完成,访问相应http://localhost/admin/hello路由即可
注意:具体扩展包内逻辑、命令行、静态文件、数据迁移、辅助函数等可根据实际业务自行分组,同laravel开发基本一致。
如果含有静态文件,记得发布!!!
php artisan vendor:publish --force
提交 发布packages
-
将packages\bennent\geauth下提交至github仓库
-
packages上创建账号
-
packages上Submit提交自己的扩展包,直接引用github仓库地址即可
-
配置packages的自动更新钩子,访问 登录packages
-
登录github, 点击仓库Setting
-
配置github 对应packages上选项(步骤4)
大功告成,至此基于laravel的扩展包开发和发布整体流程就已完成
如果有需要,大家可以安装geauth扩展,此扩展包基于laravel7的后台RBAC权限管理,让大家不必再开发后台的时候再做权限的开发,只关注自有的业务处理,除此该扩展集成了Layui2.5.7,方便大家的使用。
欢迎大家积极使用,后续会持续优化和更新
composer require bennent/geauth