laravel-admin利用ModelTree实现对分类信息的管理
根据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实现对分类信息的管理的更多相关文章
- [扩展推荐] Laravel 中利用 GeoIP 获取用户地理位置信息
我最近需要一个用户地域检测来设置用户的默认区域和货币.由 Daniel Stainback 创建的 torann/geoip 很好地满足为Laravel 5 项目提供 GeoIP 服务的要求. 这个 ...
- (二十八)分类信息的curd-分类信息删除
删除分类步骤分析: 1.在list.jsp上编写 删除连接 /store/adminCategory?method=delete&cid=?? 2.在delete方法中 获取cid 调用ser ...
- (二十七)分类信息的curd-分类信息修改
修改分类步骤分析: 1.在list.jsp页面上点击修改(编辑) /store/adminCategory?method=getById&cid=??? 2.在getById方法中 获取c ...
- (二十六)分类信息的curd-分类信息添加
分类信息添加: 1.应在在左边的dtree上添加连接(展示所有的分类信息) d.add(...,"/store/adminCategory?method=findAll",&quo ...
- (二十五)后台开发-分类信息的curd -展示所有实现
案例1-分类信息的curd 步骤分析: 左边的dtree: 1.导入dtree.js 2.导入dtree.css 3.创建一个div 添加样式 class="dtree" 4.在d ...
- 织梦CMS首页调用分类信息栏目及列表方法
不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlelen='24' orderby='pubdate' channel ...
- [转载]织梦CMS首页调用分类信息栏目及列表方法
原文地址:织梦CMS首页调用分类信息栏目及列表方法作者:小武哥 不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlele ...
- laravel项目利用twemproxy部署redis集群的完整步骤
Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...
- WordPress 获取指定分类ID的分类信息
get_term:直接从数据库中获取分类信息get_the_category:使用post_id作为参数,先根据post_id查询对应的文章然后再返回对应的分类信息,如果没有文章信息则返回Null 之 ...
随机推荐
- 跨IDC ycache原理和配置说明
总体介绍: 多idc缓存方案的invalid方案(如下图),是通过两个操作保证多个idc之间的缓存的高可用性和最终一致性的. 更新数据库后,发送invalid消息:invalid消息广播到其他id ...
- Linux搭建Samba共享服务器
实验要求: Samba文件共享服务配置与访问,配置访问用户以及相应权限. Tips:创建共享目录/test和/share,并且分别在/test下创建文件tf1(只读)tf2(读写) 在/share ...
- tomcat 日志拆分
一.用cronolog分割tomcat的catalina.out文件 1.编译安装cronologwget http://cronolog.org/download/cronolog-1.6.2.ta ...
- CompletableFuture用法介绍
一.CompletableFuture用法入门介绍 入门介绍的一个例子: package com.cy.java8; import java.util.Random; import java.util ...
- template要加s,重启服务,不然报错
- python一些包
jieba结巴 github上已经够详细了https://github.com/vinta/awesome-python
- 【css】常用的几种水平垂直居中方式与盒子模型,面试经常问到!
div水平垂直居中 假设结构为此,2个div嵌套 <div class="box"> <div class="content">< ...
- Blue Star(日剧:今夜 可否拥你入怀歌词)
BLUE STAR-COLOR CREATION Oh I Know I need you in my life ひさしぶりの 译:时隔许久的 やわらかなかせがふきぬける 清风温柔吹拂 むねのおくの ...
- Xcode增加头文件搜索路径的方法
Xcode增加头文件搜索路径的方法 以C++工程为例: 在Build Settings 页面中的Search Paths一节就是用来设置头文件路径. 相关的配置项用红框框起来了,共有三个配置项: He ...
- CF486B OR in Matrix(构造+思维)
CF486B 一道有趣的思维题 由于or的性质可知只要a[i][j]为1那么b中第i行,第j列将都变成1 相反的,如果b[i][j]是0那么a中第i行,第j列都必须是0 根据第二个性质我们可以构造出a ...