request->param('page', 1); $size = $this->request->param('size', 15); if ($this->request->isAjax()) { $data = ArticleCategory::paginate([ 'page' => $page, 'list_rows' => $size, ]); // 必须回传 count,否则 layui 表格分页失效 return json(['code' => 0, 'msg' => '', 'count' => $data->total(), 'data' => $data->items()]); } return $this->view->fetch('category/index'); } public function save() { if (Request::isPost()) { return $this->update(0); } // GET:渲染新增表单(原实现无返回值,会输出空白页) return View::fetch('category/edit', ['category' => null]); } public function edit($id = null) { $category = ArticleCategory::find($id); if (!$category) { return redirect((string) url('articles/backend/category/index')); } return View::fetch('category/edit', ['category' => $category]); } public function update($id = 0) { $data = Request::post(); $id = $id ?: (int) ($data['id'] ?? 0); $data['update_at'] = time(); $data['status'] = isset($data['status']) ? 1 : 0; $validate = new Validate([ 'name|名称' => 'require|max:50', 'alias|别名' => 'require|max:50', ]); if (!$validate->check($data)) { return json(['code' => 0, 'msg' => $validate->getError()]); } // 字段白名单(category 表实际列) $allow = ['name', 'alias', 'description', 'cover', 'sort', 'status', 'create_at', 'update_at']; try { if ($id) { $category = ArticleCategory::find($id); if (!$category) { return json(['code' => 0, 'msg' => '分类不存在']); } $category->allowField($allow)->save($data); } else { $data['create_at'] = time(); ArticleCategory::create($data, $allow); } } catch (\Throwable $e) { // alias 上有唯一键 uk_alias,重复会抛异常,转友好提示 return json(['code' => 0, 'msg' => '保存失败:别名可能已存在']); } // 前台侧边栏分类有 5 分钟缓存,写操作后立即失效 Cache::delete('articles:categories'); return json([ 'code' => 1, 'msg' => '保存成功', 'url' => (string) url('articles/backend/category/index'), ]); } public function delete($id = 0) { $id = $id ?: (int) Request::post('id', 0); $category = ArticleCategory::find($id); if ($category) { if (ArticleCategory::hasArticles($id)) { return json(['code' => 0, 'msg' => '该分类下还有文章,无法删除']); } $category->delete(); Cache::delete('articles:categories'); return json(['code' => 1, 'msg' => '已删除']); } return json(['code' => 0, 'msg' => '分类不存在']); } }