Laravel-admin 重写源码 自定义排序回调
「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
laravel-admin 是比较流程的Laravel管理后台框架
背景
有几个业务相关的配置信息需要管理后台灵活配置,且返回的数据要进行排序
为了保证业务接口的请求速度,我们把这些配置信息接口做了缓存
在管理后台进行form表单提交的时候清空缓存,保证数据及时更新(比如删除、修改之后要刷新缓存)
测试阶段发现一个问题,laravel-admin 的 sortable 扩展和框架本身的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; } }