laravel-admin 后台新增菜单栏目

laravel-admin后台自带新增菜单栏的功能
有两种方法,第一种是在laravel-admin包里新增代码。第二种是不动laravel-admin包的情况新增代码。下面分别介绍。

1.先设计好功能的数据表
在这里插入图片描述

2.先在菜单列表新增自己想要添加的菜单
在这里插入图片描述
例如我这次新增的usermanage
在这里插入图片描述
首先是第一种,这种不建议。但是可行。直接在laravel-admin里改动。

第一步:后台路由添加
vendor\encore\laravel-admin\src\Admin.php 307行
在这里插入图片描述
新增路由

 $router->resource('auth/usermanage', 'UserManageController')->names('admin.auth.usermanages');

第二步:新增控制器
在vendor\encore\laravel-admin\src\controller里新增

<?php


namespace Encore\Admin\Controllers;

use App\Models\Config;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use Illuminate\Support\Facades\Hash;
use Encore\Admin\Auth\Database\Usermanage;
use Illuminate\Support\Facades\Schema;
use function foo\func;

class UserManageController extends AdminController
{

    private $nums = 15;	//默认显示的每页数量
    private $display_cloumn = ['updated_at'];
    private $text_column = ['nickname'];

    public function __construct()
    {
        $this->model = Config('admin.database.usermanages_model');
        /**  获取数据表的字段  start */
        $table  = new Usermanage();
        $table = $table->getTable();
        $this->table_columns = Schema::getColumnListing($table);
        /**  获取数据表的字段  end */
    }

    /**
     * 控制器标题
     * {@inheritdoc}
     */
    protected function title()
    {
//        return trans('admin.administrator');
        return '用户管理';
    }

    public function index(Content $content)
    {
        return parent::index($content); // TODO: Change the autogenerated stub
    }

    /**
     *  表格
     */
    protected function grid()
    {
//        $models = Config('admin.database.usermanages_model');
//        $grid = new Grid(new $models());
 		$grid = new Grid(new $this->model());
        $show_column = array_diff($this->table_columns,$this->display_cloumn);
        
        //遍历获取字段显示
        foreach ($show_column as $column){
            $lang = 'admin.'.$column;
            if(in_array($column,$this->sort_column)){
                $grid->column($column, trans($lang))->sortable();
            }elseif (in_array($column,$this->text_column)){
                $grid->column($column, trans($lang))->text();
            }else{
                $grid->column($column, trans($lang))->default();
            }
        }
        //筛选的字段
        $grid->filter(function($fitter){
            $fitter->like('nickname',trans('admin.name'));
        });

        $grid->perPage = $this->nums;	//默认显示的每页数量
        return $grid;
    }



    /**
     * 新增表单
     */
    protected function form()
    {
        $form = new Form(New $this->model());
        $form->display('id','ID');
        $form->text('nickname','名称');
        $form->display('created_at', trans('admin.created_at'));
        $form->display('updated_at', trans('admin.updated_at'));
//        dd($form);
        $form->saving(function (Form $form){
//            if ($form->password && $form->model()->password != $form->password) {
//                $form->password = Hash::make($form->password);
//            }
        });
        return $form;
    }

    /**
     * 查看详情
     */
    protected function detail($id)
    {
        $show = new Show($this->model::findOrFail($id));
        $show_column = array_diff($this->table_columns,$this->display_cloumn);
        //遍历显示可显示的数据表字段
        foreach ($show_column as $column){
            $lang = 'admin.'.$column;
            $show->field($column, trans($lang));
        }

//        $show->field('name', trans('admin.name'));
//        $show->field('roles', trans('admin.roles'))->as(function ($roles) {
//            return $roles->pluck('name');
//        })->label();
//        $show->field('permissions', trans('admin.permissions'))->as(function ($permission) {
//            return $permission->pluck('name');
//        })->label();

//        $show->field('created_at', trans('admin.created_at'));
//        $show->field('updated_at', trans('admin.updated_at'));

        return $show;
    }

}

第三步:新增模型
1.在vendor\encore\laravel-admin\src\Auth\Database\里面新增模型

<?php


namespace Encore\Admin\Auth\Database;

use Encore\Admin\Traits\DefaultDatetimeFormat;
use Encore\Admin\Table;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Facades\Storage;

/**
 * Class Administrator.
 *
 * @property Usermanage[] $usermanages
 */
class Usermanage extends Model
{
    use DefaultDatetimeFormat;


    protected $fillable = ['username', 'password', 'name', 'avatar'];
    /**
     * Create a new Eloquent model instance.
     *
     * @param array $attributes
     */

//
//    public function __construct(array $attributes = [])
//    {
//        $connection = config('admin.database.connection') ?: config('database.default');
//
//        $this->setConnection($connection);
//
//        $this->setTable(config('admin.database.usermanages_table'));
//
//        parent::__construct($attributes);
//    }

}

2.在config\admin.php文件里地173行 database数组里添加刚刚新增的模型
在这里插入图片描述

        // Usermanage table and model.
        'usermanages_table' => 'admin_usermanages',
        'usermanages_model' => Encore\Admin\Auth\Database\Usermanage::class,

第四步:新增字段语言
在resources\lang\zh-CN\admin.php新增
在这里插入图片描述

最终效果如下:
方便的是在数据表新增字段不需要修改控制器也能显示
在这里插入图片描述

上面第一种方法是将新增代码放在源laravel-admin里

以下是第二种直接在外部新增文件,不动laravel-admin的代码。
1.首先在APP\Models新增模型

php artisan make:model  Models\Usermanage

2.artisan命令生成控制器UsermanageController.php

php artisan admin:make UsermanageController --model=App\Models\Usermanages

3.新增lang对应控制器的语言包
在resources\lang\zh-cn\下新增usermanage.php
控制器就可以用

$grid->cloumn('id',__(trans(usernamage.id)));

4.app\admin\routes.php 新增路由

$router->resource('auth/usermanage', 'UserManageController')->names('admin.auth.usermanages');
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值