laravel-admin利用ModelTree实现对分类信息的管理

1. 引言

Laravel-admin是一个基于 Laravel 框架的后台管理系统,它提供了一系列便捷的工具和插件,用于快速搭建功能完善的后台管理界面。在实现对分类信息的管理时,laravel-admin中的ModelTree插件是一个非常有用的工具。本文将介绍如何利用ModelTree实现对分类信息的管理。

2. ModelTree概述

ModelTree是laravel-admin中提供的一个类似于树状结构的插件。它可以将数据库中的数据以树状结构的形式展示,并提供了一系列的操作方法,使得对数据的管理变得简单而直观。

2.1 安装ModelTree

首先,在项目的 `composer.json` 文件中添加以下依赖:

"require": {

"encore/laravel-admin": "~1.6",

"jstree/jstree": "~3.3"

}

然后执行 `composer update` 命令进行安装。

2.2 配置ModelTree

配置ModelTree非常简单,只需定义一个数据表对应的Model类,并继承`Encore\Admin\Traits\ModelTree`。

use Encore\Admin\Traits\ModelTree;

use Illuminate\Database\Eloquent\Model;

class Category extends Model

{

use ModelTree;

/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = ['name', 'parent_id'];

}

3. 使用ModelTree实现分类管理

现在我们已经安装并配置好了ModelTree,接下来我们可以在后台管理界面中实现对分类信息的管理。

3.1 创建分类管理页面

我们可以使用`php artisan admin:make CategoryController --model=App\\Category` 命令来快速生成分类管理控制器和模型。生成后的文件可以在`app/Admin/Controllers`目录下找到。

3.2 编写分类管理页面

在分类管理控制器中,我们可以使用`modelForm`方法来创建表单界面。在表单中,我们可以使用`nestable`字段来生成ModelTree所需的html元素。

public function form()

{

$form = new Form(new Category);

$form->display('id', 'ID');

$form->text('name', '名称');

$form->nestable('parent_id', '父级分类')->sortable();

return $form;

}

在上述代码中,`nestable`字段用于生成一个可拖拽的树状结构,用户可以通过拖拽来实现分类的层级调整。

3.3 保存分类信息

在分类管理控制器中,我们可以使用`store`方法来保存表单提交的数据。在保存数据之前,我们可以使用ModelTree提供的方法来调整分类的层级关系。

public function store()

{

$data = request()->except('_token', '_method');

// 调整分类的层级关系

$this->adjustCategoryLevel($data);

Category::create($data);

return redirect('/admin/categories');

}

protected function adjustCategoryLevel(&$data)

{

$parentId = $data['parent_id'];

if ($parentId == null || $parentId == '#') {

$data['parent_id'] = null;

}

}

在上述代码中,`adjustCategoryLevel`方法用于调整分类的层级关系。如果`parent_id`为空或者为`#`,则表示该分类为顶级分类,将`parent_id`设置为`null`。

4. 结语

通过ModelTree插件,我们可以轻松实现对分类信息的管理。它提供了简单而直观的界面和丰富的操作方法,使得我们能够快速搭建出功能完善的分类管理系统。

总之,Laravel-admin的ModelTree插件为分类信息的管理提供了便捷的解决方案,让我们可以更加专注于业务逻辑的实现,而无需过多关注界面和操作的细节。

后端开发标签