laravel-admin 批量操作

这个来控制是否开启批量操作,默认开启,添加不开启

$grid->disableRowSelector();

目前默认实现了批量删除操作的功能,如果要关掉批量删除操作:

$grid->tools(function ($tools) {
    $tools->batch(function ($batch) {
        $batch->disableDelete();
    });
});

如果要添加自定义的批量操作,可以参考下面的例子。

下面是扩展一个对文章批量发布的功能:

先定义操作类app/Admin/Extensions/Tools/ReleasePost.php:

<?php

namespace App\Admin\Extensions\Tools;

use Encore\Admin\Grid\Tools\BatchAction;

class ReleasePost extends BatchAction
{
    protected $action;

    public function __construct($action = 1)
    {
        $this->action = $action;
    }
    
    public function script()
    {
        return <<<EOT
        
$('{$this->getElementClass()}').on('click', function() {

    $.ajax({
        method: 'post',
        url: '{$this->resource}/release',
        data: {
            _token:LA.token,
            ids: $.admin.grid.selected(),
            action: {$this->action}
        },
        success: function () {
            $.pjax.reload('#pjax-container');
            toastr.success('操作成功');
        }
    });
});

EOT;

    }
}

看代码的实现,通过click操作发送一个post请求,把选中的行数据id通过数组的形式传给后端接口,后端接口拿到id列表和要修改的状态来更新数据,然后前端刷新页面(pjax reload),并弹出toastr提示操作成功。

$grid->tools(function ($tools) {
    $tools->batch(function ($batch) {
        $batch->add('发布文章', new ReleasePost(1));
        $batch->add('文章下线', new ReleasePost(0));
    });
});

这样批量操作下拉按钮下面就会添加两个操作项,最后一步就是添加一个接口来处理批量操作的请求了,接口代码如下:

class PostController extends Controller
{
    ...
    
    public function release(Request $request)
    {
        foreach (Post::find($request->get('ids')) as $post) {
            $post->released = $request->get('action');
            $post->save();
        }
    }
    
    ...
}

然后添加路由指向上面的接口:

$router->post('posts/release', 'PostController@release');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值