根据laravel的基本操作步骤依次完成如下操作:
主要是参考laravel-admin内置的Menu菜单管理的功能,利用ModelTree实现业务中的Tree数据管理。

1. 创建模型
php artisan make:model Models/Category
2. 创建迁移文件
php artisan make:migration create_categories_table
3. 创建填充文件
php artisan make:seeder CategoriesSeeder
4. 创建后端控制器
php artisan admin:make CategoryController --model=App\Models\Category
5. 创建后端路由
app/admin/routes.php : $router->resource('/web/categories',CategoryController::class);
6. 添加后端菜单
/web/categories:菜单路径
7. 其他定义及编辑定制

定义Model文件Category.php

namespace App\Models;

use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model; class Category extends Model
{
use ModelTree, AdminBuilder;
//
protected $fillable = ['name','description','order','parent_id']; public function __construct(array $attributes = [])
{
parent::__construct($attributes); $this->setParentColumn('parent_id');
$this->setOrderColumn('order');
$this->setTitleColumn('name');
}
}

定义迁移

class CreateCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('description')->nullable();
$table->integer('order')->unsigned();
$table->integer('parent_id')->unsigned()->nullable();
$table->timestamps();
});
} /**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('categories');
}
}

填充文件

class CategoriesSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
DB::table('categories')->delete();
for($i = 0; $i < 3; $i++ ){
DB::table('categories')->insert(
[
'name' => 'CAT'.$i,
'description' => 'desc_'.$i,
'order' => $i,
'parent_id' => null
]
);
} }
}

定义控制器

<?php

namespace App\Admin\Controllers;

use App\Models\Category;

use Encore\Admin\Form;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;
use Encore\Admin\Layout\Row;
use Encore\Admin\Tree;
use Encore\Admin\Widgets\Box;
use Illuminate\Support\Facades\DB; class CategoryController extends Controller
{
use ModelForm; protected $header = '类型管理'; /**
* Index interface.
*
* @return Content
*/
public function index()
{
return Admin::content(function (Content $content) { $content->header($this->header);
$content->description('类型列表'); $content->row(function (Row $row) { $row->column(6, $this->treeView()->render()); $row->column(6, function (Column $column) {
$form = new \Encore\Admin\Widgets\Form();
$form->action(admin_base_path('/web/categories')); $form->text('name','类型名称');
$form->textarea('description','类型描述信息');
$form->number('order','排序序号');
$form->select('parent_id','父类名称')->options(Category::selectOptions()); $form->hidden('_token')->default(csrf_token()); $column->append((new Box(trans('admin.new'), $form))->style('success'));
});
}); });
} protected function treeView()
{
return Category::tree(function (Tree $tree) {
$tree->disableCreate();
return $tree;
});
} /**
* Edit interface.
*
* @param $id
* @return Content
*/
public function edit($id)
{
return Admin::content(function (Content $content) use ($id) { $content->header($this->header);
$content->description('编辑类型'); $content->body($this->form()->edit($id));
});
} /**
* Create interface.
*
* @return Content
*/
public function create()
{
return Admin::content(function (Content $content) { $content->header($this->header);
$content->description('添加类型'); $content->body($this->form());
});
} /**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Admin::form(Category::class, function (Form $form) { $form->display('id', 'ID'); $form->text('name','类型名称');
$form->textarea('description','类型描述信息');
$form->number('order','排序序号');
$form->select('parent_id','父类名称')->options(Category::selectOptions()); });
} public function getCategoryOptions()
{
return DB::table('categories')->select('id','name as text')->get();
}
}

添加路由

$router->resource('/web/categories',CategoryController::class);

添加后台菜单

具体操作略

laravel-admin利用ModelTree实现对分类信息的管理的更多相关文章

  1. [扩展推荐] Laravel 中利用 GeoIP 获取用户地理位置信息

    我最近需要一个用户地域检测来设置用户的默认区域和货币.由 Daniel Stainback 创建的 torann/geoip  很好地满足为Laravel 5 项目提供 GeoIP 服务的要求. 这个 ...

  2. (二十八)分类信息的curd-分类信息删除

    删除分类步骤分析: 1.在list.jsp上编写 删除连接 /store/adminCategory?method=delete&cid=?? 2.在delete方法中 获取cid 调用ser ...

  3. (二十七)分类信息的curd-分类信息修改

      修改分类步骤分析: 1.在list.jsp页面上点击修改(编辑) /store/adminCategory?method=getById&cid=??? 2.在getById方法中 获取c ...

  4. (二十六)分类信息的curd-分类信息添加

    分类信息添加: 1.应在在左边的dtree上添加连接(展示所有的分类信息) d.add(...,"/store/adminCategory?method=findAll",&quo ...

  5. (二十五)后台开发-分类信息的curd -展示所有实现

    案例1-分类信息的curd 步骤分析: 左边的dtree: 1.导入dtree.js 2.导入dtree.css 3.创建一个div 添加样式 class="dtree" 4.在d ...

  6. 织梦CMS首页调用分类信息栏目及列表方法

    不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlelen='24' orderby='pubdate' channel ...

  7. [转载]织梦CMS首页调用分类信息栏目及列表方法

    原文地址:织梦CMS首页调用分类信息栏目及列表方法作者:小武哥 不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlele ...

  8. laravel项目利用twemproxy部署redis集群的完整步骤

    Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...

  9. WordPress 获取指定分类ID的分类信息

    get_term:直接从数据库中获取分类信息get_the_category:使用post_id作为参数,先根据post_id查询对应的文章然后再返回对应的分类信息,如果没有文章信息则返回Null 之 ...

随机推荐

  1. layui数据加载中遮罩层的实现

    1.load方法提供三种风格供选择. 方法一:loadIndex = layer.load(); //不传参,默认0 方法二:loadIndex = layer.load(1); // 1,另外一种风 ...

  2. 【flask】使用配置类管理app测试环境-demo版

    如果对app.config是什么还心有疑惑,或者对于这种配置方式很陌生,参考:flask项目配置 app.config classConfig.py: class BaseConfig(object) ...

  3. Idea创建项目后,提交项目到码云的问题

    1.创建git仓库:vcs->import int version control->Create git repository 2.在项目头点击右键->git->add 3. ...

  4. SpringMVC以POST提交表单中文乱码解决方案。

    在web.xml中添加字符集过滤器: <filter> <filter-name>characterEncodingFilter</filter-name> < ...

  5. P1551 亲戚

    这里是题面啊~ 这道题我就不多说了,基本(好吧没有基本)就是一道模板题,读入+并查集+输出,完美结束 #include<set> #include<map> #include& ...

  6. HCL试验2

    PC端配置:配置ip地址 交换机1配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-type a ...

  7. 【VS开发】【电子电路技术】RJ45以太网传输线研究

    RJ45以太网传输线研究 最近研究远距离差分视频传输方案,理所当然想到了LVDS协议.至于选用cameralink传输线,还是选用其他方案,本人更倾向于廉价的RJ45以太网线来实现LVDS差分信号的传 ...

  8. djangourl进阶

  9. oracle truncate表 恢复操作

    truncate恢复表 1.创建测试用表 conn elan/elan create table haha as select * from dba_users; 2.查询表数据 ) from hah ...

  10. 小记---------网页采集之selenium

    1.元素定位 ID定位元素:  findElement(By.id(“”));  通过元素的名称定位元素:  findElement(By.name(“”));   通过元素的html中的位置定位元素 ...