在dcat的数据表格中开启了多项选择,在弹出操作表单前,如何获取复选框的选中项
//数据表格批量操作
$grid->batchActions(function ($batch) {
$batch->add(new OpDialog('批量操作按钮'));
});
//弹层触发异步表单
class OpDialog extends BatchAction
{
public function render() {
$modal = Modal::make()->lg()
->title('操作弹层')
->button('操作弹层')
->body(OpForm::make()->payload(['id'=>复选框选中项的值])) //如何向表单传递选中项的值?
->onShow($this->getModalScript());
return $modal;
}
}
//异步表单
class OpForm extends Form implements LazyRenderable
{
use LazyWidget;
//表单
public function form()
{
//TODO 表单生成前,需要得到选中项的值进行判断
}
//默认数据
public function default()
{
}
}
挺麻烦的这个,因为需要操作 js 来获取,我用自己写的一个包来做例子。
用 Action 生成一个异步表单的 Modal 大概会预渲染下面的 js 代码:
看 Dcat.helpers.asyncRender 里的 url,可以看到 query 参数有
disk=public&path=%2F
,这是我传的payload
参数,也就是没办法单纯通过 php 代码实现。找到生成这段代码的地方是一个 trait 的方法(
Modal
类引用)Dcat\Admin\Traits\InteractsWithRenderApi::getRenderableScript()
:所以需要自己继承一个
Modal
类,重写这个方法,新增一点增加参数的代码:后面就是在异步表单的 form 方法里获取
payload
里面的ids
参数,然后用 explode 解成数组,这部分我就不写了。上面代码是盲写的,可能有错误,不过思路是这样的,因为只是例子所以 url 写了个简单拼接,建议用
js
URL 对象。