zoukankan      html  css  js  c++  java
  • 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);

    添加后台菜单

    具体操作略
    图片描述

  • 相关阅读:
    wpf随笔
    XGrid绑定(转)
    SQL Server 批量插入数据的两种方法(转)
    UdpClient的Connect究竟做了什么(转)
    InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
    [C#] Control.Invoke方法和跨线程访问控件
    多线程访问winform控件出现异常的解决方法
    http://www.jdon.com/mda/oo_relation.html
    三范式浅析(转)
    SQL 表锁(转)
  • 原文地址:https://www.cnblogs.com/jasonLiu2018/p/11926687.html
Copyright © 2011-2022 走看看