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);

添加后台菜单

具体操作略
图片描述

猜你喜欢

转载自www.cnblogs.com/jasonLiu2018/p/11926687.html
今日推荐