一、移除Laravel admin
移除Laravel admin并且卸载一切Laravel admin的相关插件
composer remove encore/laravel-admin
二、注释代码
注释代码防止跑命令报错,代码位置在app/Admin/routes.php
Admin::registerAuthRoutes();
三、安装Dact admin
1、安装
composer require dcat/laravel-admin:"2.*" -vvv
2、全局替换命名空间
把Encore\Admin
替换为Dcat\Admin
3、发布资源
删除public/vendor****目录文件,并且备份配置文件config/admin.php
命名为config/admin.bak.php
,重新发布资源
php artisan admin:publish --force
四、更新路由
位置在app/Admin/routes.php
1、引入
use Dcat\Admin\Admin;
use Illuminate\Support\Facades\Route;
2、更新代码
将已注释的Admin::registerAuthRoutes();
替换为Admin::routes();
3、移除代码
'namespace' => config('admin.route.namespace')
4、更新路由写法
示例
// 将
$router->get('/', 'HomeController@index');
// 替换为:
$router->get('/', [HomeController::class, 'index']);
五、更新创建AuthController
在app/Admin/Controllers先添加文件AuthController.php,内容为
<?php
namespace App\Admin\Controllers;
use Dcat\Admin\Admin;
use Illuminate\Http\Request;
use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
/**
* Send the response after the user was authenticated.
*
* @param \Illuminate\Http\Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$path = $this->getRedirectPath();
return $this->response()
->success(trans('admin.login_successful'))
->location($path)
->locationIf(Admin::app()->getEnabledApps(), $path)
->send();
}
}
六、修改bootstrap.php
然后需要打开app/Admin/bootstrap.php,如果其中有Grid、Form、Show等等的初始化操作、以及顶部导航栏设置的功能,都需要做点改动,具体请参考文档。
示例代码:
<?php
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid\Filter;
use Dcat\Admin\Form\Field\Editor;
/**
* Dcat-admin - admin builder based on Laravel.
* @author jqh <https://github.com/jqhph>
*
* Bootstraper for Admin.
*
* Here you can remove builtin form field:
*
* extend custom field:
* Dcat\Admin\Form::extend('php', PHPEditor::class);
* Dcat\Admin\Grid\Column::extend('php', PHPEditor::class);
* Dcat\Admin\Grid\Filter::extend('php', PHPEditor::class);
*
* Or require js and css assets:
* Admin::css('/packages/prettydocs/css/styles.css');
* Admin::js('/packages/prettydocs/js/main.js');
*
*/
Admin::css('css/admin.css');
Grid::resolving(function (Grid $grid) {
$grid->disableViewButton();
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
});
});
Form::resolving(function (Form $form) {
$form->disableEditingCheck();
$form->disableCreatingCheck();
$form->disableViewCheck();
$form->tools(function (Form\Tools $tools) {
// $tools->disableDelete();
$tools->disableView();
// $tools->disableList();
});
});
Editor::resolving(function (Editor $editor) {
$editor->imageDirectory('editor/images');
});
// 扩展:隐藏的“等于”筛选
Filter::extend('hiddenEqual', HiddenEqual::class);
七、登录后台
至此可以登录后台了,后续还需要进行兼容处理,具体根据文档更改即可,例如HomeController中
// 将代码
public function index()
{
return Admin::content(function (Content $content) {
$content->header('Dashboard');
$content->row(function (Row $row) {
// 更新为:
public function index(Content $content)
{
return $content
->header('主页')
->body(function (Row $row) {
八、后台相关修改
以下只是示例,可参照dact admin文档自行修改
1、控制器
关联模型使用调整,需要检查grid、form和show是否有使用关联模型,如果有的话需要进行以下改动
// 表格
$grid = new Grid(Model::with([...]));
// 表单
$form = new Form(Model::with([...]));
// 数据详情
$show = new Show($id, Model::with([...]));
这里可能会有疑问,为什么要显式的声明关联关系,像laravel-admin那样自动判断不好吗?其实这样设计也是有原因的,主要是为了解决下面这样的问题
return Form::make(Model::with('...'), function (Form $form) {
// 主要是为了实现在这个闭包中能拿到模型数据的功能
// 而这个功能需要在回调执行之前就把数据查询出来,所以无法做到自动判断关联模型
if ($form->model()->username) {
...
} else {
...
}});
grid表格的数据导出方法用法有所不同,需要查阅文档
form表单提交已经改成ajax提交,所以表单事件用法有所不同,需要查阅文档
2、模型
如果你使用的是laravel7,需要在你的模型中加上以下代码
use Dcat\Admin\Traits\HasDateTimeFormatter;
class User extend Model{
use HasDateTimeFormatter;
}
3、自定义view
...<script>
Dcat.ready(function () {
// 把你的js代码放到这里面
});
</script>
4、使用了action form
如果你使用了laravel-admin的弹窗表单功能,需要做点调整,具体使用可参考文档工具表单