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