Skip to content

Laravel-admin 重写源码 自定义排序回调

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

laravel-admin 是比较流程的Laravel管理后台框架

背景

有几个业务相关的配置信息需要管理后台灵活配置,且返回的数据要进行排序

为了保证业务接口的请求速度,我们把这些配置信息接口做了缓存

在管理后台进行form表单提交的时候清空缓存,保证数据及时更新(比如删除、修改之后要刷新缓存)

测试阶段发现一个问题,laravel-adminsortable 扩展和框架本身的form表单提交没有关系,执行排序的时候没有回调函数,导致排序操作后无法主动清除缓存。

实现原理分析

我们可以在 form() 函数中 调用 $form->saved(function () { HobbyInfo::flushCache(); }); 进行相关操作

但是拖拽排序保存是不会触发这个函数的。

php
<?php namespace App\Admin\Controllers; . . . class HobbyInfoController extends AdminController {     /**      * Title for current resource.      *      * @var string      */     protected $title = '用户爱好-一级分类';     /**      * Make a grid builder.      *      * @return Grid      */     protected function grid()     {         $grid = new Grid(new HobbyInfo());         $grid->sortable();         .         .         .         return $grid;     }     /**      * Make a show builder.      *      * @param mixed $id      * @return Show      */     protected function detail($id)     {         $show = new Show(HobbyInfo::findOrFail($id));         return $show;     }     /**      * Make a form builder.      *      * @return Form      */     protected function form()     {         $form = new Form(new HobbyInfo());                  .         .         .         //清空缓存         $form->saved(function () {             HobbyInfo::flushCache();         });         return $form;     } }