由于项目的多样性,可能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,