写后台的时候感到好奇,为啥 gird 中的 action 不能为 form 中使用,因为都是针对一条数据操作一样的功能。
列表中操作数据长这样,继承的类
class TestCancle extends RowAction
{
}
这边的继承的是RowAction
如果想在form表单中,就是编辑当中要使用这个取消按钮的功能,目前来看需要再创建一个类来操作。
php artisan admin:action TestCancleForm
class TestCancleForm extends Action
{
}
于是我看了 RowAction 和Action 的源码对比了下,RowAction 继承了Action 也就意味着,两个能一起共用一个类,不需要写两个类(这个我只是猜想)
验证猜想
在保证gird 列表中功能正常使用的情况下,在form 中扩展RowAction。
因为在grid 中,RowAction 已经有了当前model 数据了,而form在编辑页面中准确来说获取不到model数据,于是先要在form中获取数据给RowAction
在from 表单中获取模型数据
$id=request()->route()->parameters()['Order'];
if ($id){
$form = new Form(Order::find($id));
}else{
$form = new Form(new Order());
}
把获取的模型传递给 Gird所需要的model,不传递会报错。
在form中扩展tool
$tools->add(new TestCancle($form->model(),'form'));
class TestCancle extends RowAction
{
public function __construct($model="",$from='')
{
if ($from == 'form'){
$grid = new Grid($model);
$this->setRow($model);
$this->setGrid($grid);
}
}
此时访问,from 编辑页面 可以访问
经过一番折腾,发现是可以实现的,点击一下也触发到 handle,但是你会发现官方明显没有做兼容,样式不兼容。
虽然说可以触发,但是还是很多不兼容的。
所以Laravel-admin RowAction 和Action 是否能共用?
答案是 不推荐(不可以)
在官网还没支持这个功能的时候,还是乖乖的写两个类吧