前言
由于项目的多样性,可能laravel-admin自带的表结构及其他的一些功能有所不足,此时就需要定制化开发。目前我能想到的在保留大部分laravel-admin框架功能前提下,采取的定制化方式有两种:
- 直接修改框架源代码以完成自定义功能
- 通过配置项修改(包括路由,配置文件等)
在保持composer,git管理laravel-admin情况下,又要保持与官方版本一致,显然第二种更合适。下文都是以第二种方式展开,主要工作是:
- 修改
admin/auth/users路由控制器 - 修改
admin_users表结构
环境
| 框架/插件 | 版本 |
|---|---|
| laravel | 6.20 |
| encore/laravel-admin | 1.8.11 |
默认基础环境以搭建完成,如有不清楚的可以移步框架搭建,以下以完成安装能正常使用后台包括权限系统为前提。
自定义路由
-
默认路由文件:
app/Admin/routes.php<?php use Illuminate\Routing\Router; //此为默认权限控制模块路由以及其他操作路由 Admin::routes(); //此为后台路由组 Route::group([ 'prefix' => config('admin.route.prefix'), 'namespace' => config('admin.route.namespace'), 'middleware' => config('admin.route.middleware'), 'as' => config('admin.route.prefix') . '.', ], function (Router $router) { $router->get('/', 'HomeController@index')->name('home'); }); -
查看路由文件
主要查看上文中
Admin::routes()这个路由配置,其实此时调用的是Admin这个Facade 中的routes()方法,查看源码可知这个Facade代码位置:vendor/encore/laravel-admin/src/Facades/Admin.php<?php namespace Encore\Admin\Facades; use Illuminate\Support\Facades\Facade; class Admin extends Facade { protected static function getFacadeAccessor() { return \Encore\Admin\Admin::class; } }其中的
\Encore\Admin\Admin::class找到类文件中的方法routes(),可以看到里面定义了默认权限控制模块路由以及其他操作路由,至此,我们已经找到修改的思路。 -
修改路由
-
新建类文件,继承
\Encore\Admin\Admin以修改对应方法<?php namespace App\Admin; use Encore\Admin\Admin; use Encore\Admin\Controllers\AuthController; class CustomAdmin extends Admin { public function routes() { $attributes = [ 'prefix' => config('admin.route.prefix'), 'middleware' => config('admin.route.middleware'), ]; app('router')->group($attributes, function ($router) { /* @var \Illuminate\Support\Facades\Route $router */ $router->namespace('\Encore\Admin\Controllers')->group(function ($router) { /* @var \Illuminate\Routing\Router $router */ //注释原本的路由,找到对应控制器,可以直接继承,只修改对应的部分,或者全部复制修改 //$router->resource('auth/users', 'UserController')->names('admin.auth.users'); $router->resource('auth/roles', 'RoleController')->names('admin.auth.roles'); $router->resource('auth/permissions', 'PermissionController')->names('admin.auth.permissions'); $router->resource('auth/menu', 'MenuController', ['except' => ['create']])->names('admin.auth.menu'); $router->resource('auth/logs', 'LogController', ['only' => ['index', 'destroy']])->names('admin.auth.logs'); $router->post('_handle_form_', 'HandleController@handleForm')->name('admin.handle-form'); $router->post('_handle_action_', 'HandleController@handleAction')->name('admin.handle-action'); $router->get('_handle_selectable_', 'HandleController@handleSelectable')->name('admin.handle-selectable'); $router->get('_handle_renderable_', 'HandleController@handleRenderable')->name('admin.handle-renderable'); }); //新加路由--start-- $router->namespace('\App\Admin\Controllers')->group(function ($router) { $router->resource('auth/users', 'AdminUserController')->names('admin.auth.users'); }); //新加路由--end-- $authController = config('admin.auth.controller', AuthController::class); /* @var \Illuminate\Routing\Router $router */ $router->get('auth/login', $authController.'@getLogin')->name('admin.login'); $router->post('auth/login', $authController.'@postLogin'); $router->get('auth/logout', $authController.'@getLogout')->name('admin.logout'); $router->get('auth/setting', $authController.'@getSetting')->name('admin.setting'); $router->put('auth/setting', $authController.'@putSetting'); }); } } -
新建控制器文件
app/Admin/Controllers/AdminUserController.php继承Encore\Admin\Controllers\UserController -
新建自定义Facade
app/Facades/CustomAdmin.php -
修改路由文件
app/Admin/routes.php替换Admin:routes()<?php .... \App\Facades\CustomAdmin::routes(); ....
-
至此路由已经可以自定义,并且可以根据上述方式,自定义任意自带的方法
修改配置
-
修改表结构(admin_users)
直接在数据库中修改或者使用数据迁移,我使用的是数据迁移,新加了一个软删除字段
/** * Run the migrations. * * @return void */ public function up() { Schema::table('admin_users', function (Blueprint $table) { .... $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('admin_users', function (Blueprint $table) { ... $table->dropSoftDeletes(); }); } -
查找替换
admin_users模型-
新建ORM模型文件
app/Model/AdminUser.php, -
查看配置文件
config/admin.php找到database.users_model'users_model' => Encore\Admin\Auth\Database\Administrator::class, -
修改模型继承
Encore\Admin\Auth\Database\Administrator::class -
在新建的orm文件加上软删除
-
找到配置文件
config/admin.php中database.users_model替换'users_model' => App\Model\AdminUser::class,
-
本文介绍了在laravel-admin框架下如何进行自定义路由和修改权限模块,以适应项目的多样化需求。通过不修改laravel-admin源代码,而是通过配置项调整,实现了保留框架功能的同时进行定制化开发。主要内容包括:自定义路由控制器,修改表结构,以及新增软删除字段的ORM模型。
3467

被折叠的 条评论
为什么被折叠?



