这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战
一、分类管理添加分类api
1、分类管理迁移文件
1.1 创建模型同时生成迁移文件
运行命令php artisan make:model Category -m
:
1.2 创建表字段并执行迁移文件
在迁移文件2021_08_10_150705_create_categories_table.php
中创建表字段:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name')->comment('分类名称');
$table->string('pid')->default(0)->comment('父级,0最高级');
$table->tinyInteger('status')->default(1)->comment('状态:0禁用,1启用');
$table->tinyInteger('level')->default(1)->comment('分类级别');
$table->timestamps();
});
}
运行命令php artisan migrate
执行迁移文件:
就会出现分类表:
2、分类管理控制器
运行命令php artisan make:controller Admin/CategoryController --api
:
继承基础控制器:
2.1 添加分类控制器方法
CategoryController.php
添加store
方法:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:16'
], [
'name.required' => '分类名称不能为空'
]);
Category::create($request->only(['name', 'pid']));
return $this->response->created();
}
2.2 配置模型可允许添加字段
在Models\Category.php
中添加:
// 可以批量赋值的字段
protected $fillable = ['name', 'pid'];
2.3 添加效果
2.4 level层级问题
我们可以看到有一个问题,那就是id
为5的是id
为1的子类,那么它的level
就应该是2。
所以我们处理下CategoryController.php
控制器逻辑:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:16'
], [
'name.required' => '分类名称不能为空'
]);
$pid = $request -> input('pid', 0);
$insertData = [
'name' => $request -> input('name'),
'pid' => $pid,
'level' => $pid == 0 ? 1 : (Category::find($pid) -> level + 1)// 计算level
];
Category::create($insertData);
return $this->response->created();
}
由于我们添加了level
,所以在Models\Category.php
中还要增加批量赋值的字段:
2.5 测试层级问题
可以看到现在就没有问题了。
2.6 限制最大层级3级
还是在CategoryController.php
控制器中处理逻辑:
public function store(Request $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('不能超过三级分类');
$insertData = [
'name' => $request -> input('name'),
'pid' => $pid,
'level' => $level,
];
Category::create($insertData);
return $this->response->created();
}
效果:
3、分类资源路由
在routes/admin.php
中创建分类资源路由:
// 分类管理资源路由
$api->resource('category', CategoryController::class, [
'except' => ['destroy']
]);
我们将这个删除的路由给排除,因为分类的话,后面会涉及到这个分类是否有东西,如果删除的话比较麻烦,我们直接用启用和禁用来代替就行了。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!