这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
一、分类层级列表api
1.1 创建全局辅助函数
如果我们直接去取的话,会发现返回的数据不会像菜单那种嵌套的数据,当然你也可以直接给前端,让他处理,但是是非常不友好的,我们既然提供api
的话就要健壮性,友好性,能够让api
调用直接能用的。
1、创建全局自定义辅助函数
在根目录下创建heplers.php
,创建完之后需要在composer.php
中加入自动加载类。
添加完自动加载之后,需要去刷新下,运行命令composer dump-autoload
:
heplers.php
写入代码:
<?php
use App\Models\Category;
/**
* 所有分类选择属性返回
*/
if (!function_exists('categoryTree')) {
function categoryTree ($status=false) {
$categories = Category::select(['id','pid','name','level','status'])
->when($status !== false, function ($query) use ($status) {
$query->where('status', $status);
})
-> where('pid', 0)
->with([
'children' => function ($query) use ($status) {
$query->select(['id','pid','name','level','status'])
->when($status !== false, function ($query) use ($status) {
$query->where('status', $status);
});
},
'children.children' => function ($query) use ($status) {
$query->select(['id','pid','name','level','status'])
->when($status !== false, function ($query) use ($status) {
$query->where('status', $status);
});
}
]) // 嵌套关联,让子类去查找关联子类
->get();
return $categories;
}
}
/**
* 缓存没被禁用的分类
*/
if (!function_exists('cache_category')) {
function cache_category () {
return cache()->rememberForever('cache_category', function () {
return categoryTree(1);
});
}
}
/**
* 缓存所有的分类
*/
if (!function_exists('cache_category_all')) {
function cache_category_all () {
return cache()->rememberForever('cache_category_all', function () {
return categoryTree();
});
}
}
/**
* 清空所有分类缓存
*/
if (!function_exists('forget_cache_category_all')) {
function forget_cache_category_all () {
cache()->forget('cache_category_all');
cache()->forget('cache_category');
}
}
代码解析:
1.2 分类api列表控制器
public function index()
{
return cache_category_all();
}
可以看到我们这里直接去取我们写好的辅助函数。 但是需要注意的是,我们在添加控制器方法中是需要清除缓存的: 也是直接调用我们写好的清除缓存的辅助函数。
1.3 效果
可以看到我们调用请求分类列表,其数据格式(三级嵌套)如下:
[
{
"id": 9,
"pid": "0",
"name": "商品管理",
"level": 1,
"status": 1,
"children": [
{
"id": 11,
"pid": "9",
"name": "商品列表",
"level": 2,
"status": 1,
"children": []
},
{
"id": 12,
"pid": "9",
"name": "添加商品",
"level": 2,
"status": 0,
"children": []
}
]
},
{
"id": 10,
"pid": "0",
"name": "权限管理",
"level": 1,
"status": 1,
"children": [
{
"id": 13,
"pid": "10",
"name": "菜单管理",
"level": 2,
"status": 1,
"children": [
{
"id": 14,
"pid": "13",
"name": "添加菜单",
"level": 3,
"status": 1
}
]
},
{
"id": 15,
"pid": "10",
"name": "人员管理",
"level": 2,
"status": 1,
"children": [
{
"id": 16,
"pid": "15",
"name": "添加人员",
"level": 3,
"status": 0
},
{
"id": 18,
"pid": "15",
"name": "删除人员",
"level": 3,
"status": 1
},
{
"id": 19,
"pid": "15",
"name": "删除人员",
"level": 3,
"status": 1
}
]
}
]
}
]
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!