编程教育资源分享平台

网站首页 > 后端开发 正文

laravel admin 之回收站trait妙用

luoriw 2024-02-01 14:22:27 后端开发 12 ℃ 0 评论

接手一个小项目,练练手。很早前使用laravel只开发过api。这次把整套框架和配套全搞了一遍。

技术选型

php8

laravel8

laravel-admin 1.8

mysql8

redis

阿里云centos 8

laravel-admin 1.8

admin 2.0还是beta版本,建议生产环境使用1.8最新的。1.8有一版本有漏洞。

软删除文档参考

https://laravel-admin.org/docs/en/model-grid-soft-deletes#Row%20restore

action操作命令

php artisan admin:action Configs\\Restore --grid-row --name="恢复"

具体细节请参考官网文档

https://laravel-admin.org/docs/en/model-grid-custom-actions#Row%20action

言归正传,trait在laravel-admin中的代码优化,很具有代表性。

  1. 每个业务模块都需要软删除
  2. 软删除的action代码极度相似,唯一不同的是namespace

最开始的想法是写个基类,代码快要交付了,心里的洁癖虫发动。整理下这个过程。

最初的代码:

namespace App\Admin\Actions\Configs;

use Encore\Admin\Actions\RowAction;
use Illuminate\Database\Eloquent\Model;

class Restore extends RowAction
{
    public $name = '恢复';

    public function handle(Model $model)
    {
        $model->restore();

        return $this->response()->success('已恢复')->refresh();
    }

    public function dialog()
    {
        $this->confirm('确定恢复吗?');
    }
}

试想,有十几个模块里的功能代码几乎重复...

使用trait着手优化

1、创建公用的TraitRestoreAction

<?php
namespace App\Admin\Actions;
use Illuminate\Database\Eloquent\Model;
trait TraitRestoreAction
{
    
    public function handle(Model $model)
    {
        $model->restore();

        return $this->response()->success('已恢复')->refresh();
    }

    public function dialog()
    {
        $this->confirm('确定恢复吗?');
    }
}

2、优化后代码

<?php

namespace App\Admin\Actions\Configs;

use Encore\Admin\Actions\RowAction;
use App\Admin\Actions\TraitRestoreAction;
class Restore extends RowAction
{
    #$name和框架的action的$name有冲突,无法放到trait里实现
    public $name = '恢复';
    use TraitRestoreAction;

}

如此这般后,其他页面和模块的恢复操作代码量就少一大半了。

成品展示


删除


删除后的数据进入回收站


可恢复,业务操作按钮可按需求做隐藏

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表
最新留言