实战-基于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

服务容器

  1. 创建服务容器 php artisan make:provider GeauthServiceProvider

  2. 转移服务容器和修改

    // 将刚创建好的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'),
    
            ]);
        }
    }
    
  3. 服务注册

// config\app.php
'provider' => [
   ...
   Bennent\Geauth\GeauthServiceProvider::class,
]
  1. Facades注解
// src\Facades\Geauth.php
namespace Bennent\Geauth\Facades;
use Illuminate\Support\Facades\Facade;

class Geauth extends Facade
{
    
    
   protected static function getFacadeAccessor()
    {
    
    
       return 'Geauth';
    }
}
  1. 发现扩展包
// 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

  1. 将packages\bennent\geauth下提交至github仓库

  2. packages上创建账号

  3. packages上Submit提交自己的扩展包,直接引用github仓库地址即可

  4. 配置packages的自动更新钩子,访问 登录packages
    在这里插入图片描述

  5. 登录github, 点击仓库Setting
    在这里插入图片描述

  6. 配置github 对应packages上选项(步骤4)
    在这里插入图片描述

大功告成,至此基于laravel的扩展包开发和发布整体流程就已完成
如果有需要,大家可以安装geauth扩展,此扩展包基于laravel7的后台RBAC权限管理,让大家不必再开发后台的时候再做权限的开发,只关注自有的业务处理,除此该扩展集成了Layui2.5.7,方便大家的使用。

欢迎大家积极使用,后续会持续优化和更新

composer require bennent/geauth

猜你喜欢

转载自blog.csdn.net/glx490676405/article/details/114178422