• 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=AppModelsCategory
    5. 创建后端路由
        app/admin/routes.php : $router->resource('/web/categories',CategoryController::class);
    6. 添加后端菜单
        /web/categories:菜单路径
    7. 其他定义及编辑定制

    定义Model文件Category.php

    namespace AppModels;
    
    use EncoreAdminTraitsAdminBuilder;
    use EncoreAdminTraitsModelTree;
    use IlluminateDatabaseEloquentModel;
    
    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 AppAdminControllers;
    
    use AppModelsCategory;
    
    use EncoreAdminForm;
    use EncoreAdminFacadesAdmin;
    use EncoreAdminLayoutColumn;
    use EncoreAdminLayoutContent;
    use AppHttpControllersController;
    use EncoreAdminControllersModelForm;
    use EncoreAdminLayoutRow;
    use EncoreAdminTree;
    use EncoreAdminWidgetsBox;
    use IlluminateSupportFacadesDB;
    
    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 EncoreAdminWidgetsForm();
                        $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);

    添加后台菜单

    具体操作略
    图片描述

  • 相关阅读:
    网页日历显示控件calendar3.1
    切换“使用被动式FTP”
    href="javascript:xxx(this);"和onclick="javascript:xxx(this);"的区别
    CSS布局--上中下布局(上下固定,中间自适应)
    css字体颜色动画
    怎么让jQuery支持swipe事件
    html 5 canvas
    javascript面向对象
    WEB相关存储方式
    angularjs
  • 原文地址:https://www.cnblogs.com/jasonLiu2018/p/11926687.html
Copyright © 2020-2023  润新知