使用 laravel-admin 配置后台管理系统

内容有点多,就不说别的了。。
需要一个简单的后台管理系统,对接数据库中的用户信息表,完成基本的增删改查操作。
最好支持权限管理;有便捷的接口可供调用(不需要深度定制);前端界面和交互美观简洁,足够“现代化”;架构明晰,配置简单,可快速成型等等。
几经查找,感觉 laravel-admin 这个框架还不错。虽说文档算不上完善,小踩几坑,没怎么太费事就构建好了。值得记录一下。

后台管理系统

一、安装 Laravel 环境

laravel-admin 需要 PHP 7+Lavavel 5.5+ ,我当前使用的是 VirtualBox 虚拟机里的 Ubuntu 19.04 系统,配置起来还是比较方便的。
Laravel 官方的定义是 The PHP Framework For Web Artisans ,优雅和快速成型。依赖于 PHP >= 7.1.3 和一些 PHP 扩展组件。可以使用 Linux 系统自带的包管理器进行安装,命令如下:
$ sudo apt-get install php7.2 php7.2-bcmath php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml php7.2-zip php7.2-common

安装 composer 并配置国内镜像

Composer 是 PHP 语言的依赖管理工具,类似于 Node.js 下的 npm 。后面需要用到的 Laravel 、laravel-admin 及其相关的依赖项都可以通过 composer 命令安装。
$ sudo apt-get install composer

为了提高访问速度,可以把 composer 的镜像源改为国内版本,命令如下(全局配置):
$ composer config -g repo.packagist composer https://packagist.laravel-china.org

安装 Laravel 并初始化项目

使用 composer 命令安装 Laravel :
composer global require laravel/installer

将 Laravel 安装路径添加到 PATH 环境变量:
$ echo export PATH="$PATH:~/.config/composer/vendor/bin" >> ~/.zshrc && source ~/.zshrc

初始化 Laravel 项目:
$ laravel new admin

以上步骤完成后,进入 admin 项目目录,运行 $ php artisan serve 命令即可开启一个最基本的 Laravel 站点。

配置数据库

安装 mysql 数据库:
$ sudo apt-get install mysql-server

创建数据库 admin 并授权给测试账户(用户名 test_user ,密码 test_password):

mysql> CREATE DATABASE admin;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL ON admin.* to test_user IDENTIFIED BY 'test_password';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
修改数据库配置文件

编辑 config/database.php 文件(已经默认使用 mysql 数据库),修改 mysql 配置部分,将 url 改为如下形式:
'url' => env('DATABASE_URL', 'mysql://test_user:test_password@127.0.0.1/admin'),
(数据库 URL 的格式为 mysql://用户名:密码@IP地址/数据库名

二、安装 laravel-admin

数据库配置完成后,即可按照以下步骤安装配置 laravel-admin 。

admin 目录下,使用 composer 命令安装 laravel-admin :
$ composer require encore/laravel-admin

发布资源:
$ php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

使用以下命令完成安装:
$ php artisan admin:install

运行服务查看效果:
$ php artisan serve

访问 http://127.0.0.1:8000/admin ,使用用户名 admin 和密码 admin 登录,效果如下:

laravel-admin

安装完成后,laravel-admin 所有的配置都在 config/admin.php 文件中(如站点名称、logo、登录界面的背景等),而项目文件的安装目录为 app/Admin ,目录结构如下:

app/Admin
├── Controllers
│   ├── ExampleController.php
│   └── HomeController.php
├── bootstrap.php
└── routes.php

其中 app/Admin/routes.php 文件用来配置后台路由;
app/Admin/bootstrap.php 是 laravel-admin 的启动文件;
app/Admin/Controllers 目录用来存放后台控制器文件,该目录下的HomeController.php 文件是后台首页的显示控制器。

三、一些必要的配置

项目进行到这里,已经具备了一个后台管理系统的所有基本要素,只是在添加或者修改用户时,会报出下图所示的 Config error ,需要添加一个 Disk 配置:

Disk error

编辑 config/filesystems.php 文件,在 'disks' 配置下添加如下内容:

'admin' => [
            'driver' => 'local',
            'root' => public_path('upload'),
            'visibility' => 'public',
            'url' => env('APP_URL').'/public/puload/',
            ],
disk config
中文配置

配置界面语言为中文可以修改 config/app.php 文件,将其中的 locale => en 改为 locale => zh-CN 即可。

其他常用的配置如站点名称、页面布局等可以编辑 config/admin.php 文件,文件中的注释信息非常详细,根据需求直接修改即可。

四、绑定自己的数据库

前面生成的算是演示用的示例页面,如果需要绑定和管理自己的数据库表格,操作也是比较简单的。

创建数据库表格

在之前创建的 admin 数据库中添加名为 employee 的表格:

mysql> CREATE TABLE employee (
    -> id int(6) unsigned AUTO_INCREMENT PRIMARY KEY,
    -> number int(6) unsigned NOT NULL UNIQUE,
    -> name varchar(10) NOT NULL,
    -> mail varchar(60) UNIQUE,
    -> password varchar(30),
    -> department varchar(40) NOT NULL DEFAULT ''
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
创建模型文件

$ php artisan make:model Employee

上述命令会创建 app/Employee.php 模型文件,将该文件改为如下内容:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
        protected $table = 'employee';
        public $timestamps = false;
}

PS:关于模型的使用可以参考 Laravel 官方文档

添加控制器

通过以下命令创建一个对接 app/employee 模型的控制器:

$ php artisan admin:make EmployeeController --model=App\\Employee
App\Admin\Controllers\EmployeeController created successfully.
添加路由

编辑路由配置文件 app/Admin/routers.php ,在根 URL 的路由下添加如下一行内容:
$router->resource('employee', EmployeeController::class);

添加网页菜单

访问 http://127.0.0.1:8000/admin/auth/menu ,添加页面左侧的菜单项,用于指向前面创建的后台数据。

menu

上述步骤完成后,访问 http://127.0.0.1:8000/admin/employee ,最终效果如下:

employee

五、优化筛选和密码显示

上面完成的项目中,筛选按钮只支持通过 ID 搜索,密码也是直接显示。这些和表格相关的行为都可以通过修改 app/Admin/Controllers/EmployeeController.php 文件进行控制。

修改 EmployeeController.php 文件中对表格相关行为的定义:

protected function grid()
{
    $grid = new Grid(new Employee);

    // 不显示 ID 列
    //$grid->id('ID');^M

    $grid->number('工号');^M
    $grid->name('姓名');^M
    $grid->mail('邮箱');^M

    // 隐藏密码列
    //$grid->password('Password');^M

    $grid->department('部门');

    $grid->filter(function($filter){

        // 去掉默认的 id 过滤器
        $filter->disableIdFilter();

        // 添加新的字段过滤器(通过工号过滤)
        $filter->like('number', '工号');
    });

    return $grid;
}

实际效果如下:


自定义表格和筛选

六、nginx 服务器配置

首先需要终止默认安装的 Apache2 服务并安装 nginxphp-fpm

$ sudo systemctl stop apache2
$ sudo systemctl disable apache2
$ sudo apt-get install nginx php7.2-fpm

创建新的站点配置文件(/etc/nginx/sites-available/admin.conf)并写入以下内容:

server {
    listen 80;
    server_name 127.0.0.1;
    root <your-project-path>/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

使用以下命令启用新的站点配置并重启 nginx 服务:

$ sudo ln -s /etc/nginx/sites-available/admin.conf /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

需要注意的是,app/storage 目录的属主应该与运行 nginx 服务的用户(默认为 www-data)一致,可通过以下命令修改:
$ sudo chown -R www-data storage

参考资料

laravel-admin 官方文档
Laravel 官网

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容