laravel分类详情,更新分类,禁用启用分类api以及缓存优化

一、分类详情api

1.1 分类详情控制器方法

    /**
     * 分类详情
     */
    public function show(Category $category)
    {
        return $category;
    }

在这里插入图片描述
我们这边直接使用路由模型,返回模型。

1.2 测试效果:

在这里插入图片描述
可以看到当前分类详情数据已经返回。


不过需要注意的是在获取分类详情的时候,编辑的时候是需要获取到所有分类列表的。但是禁用的我们不显示,所以需要在获取列表的控制权方法中修改,默认获取到列表不包含被禁用的,只要传了all就是获取所有的包括被禁用的,如下修改:

public function index(Request $request)
    {   
        $type = $request->input('type');
        if ($type == 'all') {
            return cache_category_all();
        }
        else {
            return  cache_category(); 
        }
    }

在这里插入图片描述
这样我们就可以在文档中写入参数说明,需要全部的传all,正常取的话那些被禁用的就取不到,符合业务场景。

二、更新分类api

2.1 更新分类控制权方法

    /**
     * 更新分类详情
     */
    public function update(Request $request, Category $category)
    {
        $request->validate([
            'name' => 'required|max:16'
        ], [
            'name.required' => '分类名称不能为空'
        ]);
        
        // 获取pid 
        $pid = $request -> input('pid', 0);

        // 计算level 
        $level = $pid == 0 ? 1 : (Category::find($pid) -> level + 1); // 计算level

        // 分类不超过3级
        if ($level > 3) return $this->response->errorBadRequest('不能超过三级分类');

        $updateData = [
            'name' => $request -> input('name'),
            'pid' => $pid,
            'level' =>  $level,
        ];
        $category->update($updateData);

        // 更新成功需要刷新缓存
        forget_cache_category_all();

        return $this->response->noContent();
    }

2.2 测试效果

在这里插入图片描述

2.3 优化

我们可以看到在添加和更新的时候验证存在代码冗余,我们在当前分类控制器中写个函数来判断表单验证及计算:

    /**
     * 验证提交的参数
     */
    protected function checkInput($request) {
        $request->validate([
            'name' => 'required|max:16'
        ], [
            'name.required' => '分类名称不能为空'
        ]);
        
        // 获取pid 
        $pid = $request -> input('pid', 0);

        // 计算level 
        $level = $pid == 0 ? 1 : (Category::find($pid) -> level + 1); // 计算level

        // 分类不超过3级
        if ($level > 3) return $this->response->errorBadRequest('不能超过三级分类');

        return [
            'name' => $request -> input('name'),
            'pid' => $pid,
            'level' =>  $level,
        ];
    }

修改添加和更新方法:

    /**
     * 添加分类
     */
    public function store(Request $request)
    {
        $insertData = $this->checkInput($request);
        if (!is_array($insertData)) return $insertData;

        Category::create($insertData);

        // 创建成功需要刷新缓存
        forget_cache_category_all();

        return $this->response->created();
    }
    /**
     * 更新分类详情
     */
    public function update(Request $request, Category $category)
    {
        $updateData = $this->checkInput($request);
        if (!is_array($updateData)) return $updateData;

        $category->update($updateData);

        // 更新成功需要刷新缓存
        forget_cache_category_all();

        return $this->response->noContent();
    }

测试发现效果还是一样,但此时代码已经精简了。可以看到我们使用laravel非常简便和优雅。

三、禁用和启用分类api

3.1 定义禁用和启用分类路由

  //禁用和启用路由
  $api->patch('category/{category}/status', [CategoryController::class, 'status']);

3.2 控制器方法

    /**
     * 状态禁用和启用
     */
    public function status(Category $category)
    {
        $category->status = $category -> status == 1 ? 0 : 1;
        $category->save();
        // 更新需要刷新缓存
        forget_cache_category_all();
        return $this->response()->noContent();
    }

在这里插入图片描述

3.3 测试效果

在这里插入图片描述
在这里插入图片描述

3.4 优化(观察者)

我们可以看到,每次在数据发生改变的时候,我们都要去清空下缓存,但是我们现在是直接写在方法里的,我们可以将其写在模型事件里,而不用每次去控制器方法调用一下。
但是我们写在模型里的话,模型中代码会臃肿,所以我们使用观察者。
创建观察者命令:
php artisan make:observer CategoryObserver --model=Category
在这里插入图片描述


CategoryObserver.php观察者中写入事件清空缓存:
在这里插入图片描述


然后删除CategoryController.php控制器中的删除清空缓存的代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


然后再在app/Providers/AppServiceProvider.php中将我们的观察者注册进去:
在这里插入图片描述


1 测试

在这里插入图片描述
可以看到现在分了添加商品是被禁用的。
那我们获取下分类列表:
在这里插入图片描述
可以看到里面是没有被禁用掉的添加商品。我们通过禁用和启用接口调用,将添加商品变为启用的状态,再重新获取看看是不是走缓存,还是重新去数据库取了。效果:
在这里插入图片描述
在这里插入图片描述
可以看到效果还是一样的,不过我们使用了观察者去监听模型是否改变了。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值