Laravel-Administrator 快速创建数据管理后台
27

说明

管理界面是基础设施中非常重要的一部分, 很常用的功能, 每一个成熟的框架, 都有其对应的解决方案, 如:

Laravel-Administrator 是 Laravel 的扩展包, 利用强大的 Eloquent ORM, 加上简单的配置信息, 快速生成数据管理后台.

在开发时间不充裕的情况下, 用很短的时间, 就能创建一个后台, 这个插件会让你在使用 Laravel 开发时, 感受到满满的幸福感感.

屏幕截图

安装

1. composer.json

"frozennode/administrator": "4.*"

2. install

composer update

3. provider

修改 app/config/app.php 文件, 在 providers 数组里面添加:

'Frozennode\Administrator\AdministratorServiceProvider',

4. package config

发布扩展包配置信息信息, 以下命令会生成文件 app/config/packages/frozennode/administrator/administrator.php

php artisan config:publish frozennode/administrator

至此, 安装完毕.

修改 administrator.php 配置信息

官方的文档在这 http://administrator.frozennode.com/docs/configuration

这里有个例子, 加上简单的注释, 此例子是 laravel-blog 项目的后台配置信息, 源码见这里 :

<?php

return array(

    /**
     * 后台入口地址
     */
    'uri' => 'admin',

    /**
     * 管理员后台名称, 在左上角显示
     */
    'title' => 'Admin Panel',

    /**
     * Model 配置文件存放地
     */
    'model_config_path' => app('path') . '/config/administrator',

    /**
     * 站点 `设置` 功能的配置文件存放地
     */
    'settings_config_path' => app('path') . '/config/administrator/settings',

    /**
     * 这里是配置菜单的地方, 每一个元素代表了上面定义的 `model_config_path` 目录
     * 下有对应的文件, 如: 'categories' 对应 categories.php 文件, 这个规则对
     * 站点设置信息通用. 
     *
     * 更多信息请见文档: http://administrator.frozennode.com/docs/configuration#menu 
     * 
     * @type array
     *
     *  array(
     *      'E-Commerce' => array('collections', 'products', 'product_images', 'orders'),
     *      'homepage_sliders',
     *      'users',
     *      'roles',
     *      'colors',
     *      'Settings' => array('settings.site', 'settings.ecommerce', 'settings.social'),
     *      'Analytics' => array('E-Commerce' => 'page.ecommerce.analytics'),
     *  )
     */
    'menu' => [
        'categories',
        'tags',
        'posts',
        'comments',
        'users',
    ],

    /**
     * 后台权限判断, 如果返回 false 的话, 会自动跳转到 login_path 页面
     */
    'permission'=> function()
    {
        return Auth::check();
    },

    /**
     * 是否使用自定义后台首页, true 的话, 会使用 dashboard_view 
     */
    'use_dashboard' => false,

    /**
     * 如果你想要自定义后台首页, 上面的 use_dashboard 改为 true, 并在此提供指定的 view
     */
    'dashboard_view' => '',

    /**
     * 后台首页, 这里的值对应 menu 的元素, 与 'use_dashboard' => false, 配合使用
     */
    'home_page' => 'posts',

    /**
     * 右上角 "返回首页" 点击后的跳转链接
     */
    'back_to_site_path' => '/',

    /**
     * 登录链接, 当 `permission` 选项返回 false 的时候, 跳转到此页面
     */
    'login_path' => 'login',

    /**
     * 是否在后台有退出按钮, 是的话填写 path, 否则填写 false
     */
    'logout_path' => false,

    /**
     * 当用户没有权限, 跳转到登录页面时, 会把用将要请求的页面放在 Session::get('redirect') 
     */
    'login_redirect_key' => 'redirect',

    /**
     * 全局默认每页显示多少数据
     */
    'global_rows_per_page' => 20,

    /**
     * 多语言支持, 这里配置的话, 右上角会出现多语言的选择菜单
     */
    'locales' => array(),

);

administrator 的后台数据配置文件

后台是根据 后台数据配置文件 生成的, 这些文件在上面 menu 选项里面 定义 .

根据上面的定义, 在 config 文件夹下创建 administrator 文件夹, 并创建对应的文件如以下:

  • categories.php
  • comments.php
  • posts.php
  • tags.php
  • users.php

内容请见源代码 - Laravel Blog 项目的后台数据配置文件

以下拿 posts.php 文件为例, 生成后台页面请参照文章开始的截图:

<?php

return [

    // 菜单里面显示的名字
    'title' => lang('Post'),

    // 右上角有 `New $single` 的创建新内容的文字
    'single' => lang('Post'),

    // 依赖于 Eloquent ORM 作数据读取和处理
    'model' => 'Post',

    // 显示页面
    'columns' => [

        // 当前列在数据库中的字段名称, 下同
        'id' => [
            // 这个参数定义当前列的名称, 下同
            'title' => 'ID'
        ],
        'title' => [
            'title' => lang('Title'),
        ],
        'body' => [
            'title' => lang('Content'),

            // 这个参数定义了是否支持排序, 下同
            'sortable' => false,

            // 这是自定义输出内容, 如果不定义的话, 会使用字段对应的数据, 下同
            'output' => function($value)
            {
                return make_excerpt($value);
            },
        ],
        'user_name' => [
            'title' => lang("Author"),

            // 自定义字段, 读取对应关系里面的数据, 下同
            'relationship' => 'user',

            // 对应关系在这里显示的内容
            'select' => "(:table).username",
        ],
        'category_name' => [
            'title' => lang("Category"),
            'relationship' => 'category', //this is the name of the Eloquent relationship method!
            'select' => "(:table).name",
        ],
        'comments_count' => [
            'title' => 'Comments Count'
        ],

        // 不指定 title 的话, 会使用字段作为 title
        'created_at',
    ],

    // 单点击选择单条数据的时候, 右边会出现编辑小视图, 这里定义了视图里面的字段
    'edit_fields' => [

        // 对应字段
        'title' => [

            // 标题
            'title' => lang('Title'),

            // 可编辑字段的类型
            'type' => 'text'
        ],
        'category' => array(

            // type 为 relationship 会根据 name_field 自动生成可选择的内容
            'type' => 'relationship',

            'title' => lang('Category'),
            'name_field' => 'name',
        )
    ],

    // 过滤, 搜索
    'filters' => [
        'title' => [
            'title' => lang('Title'),
        ]
    ],

    // 点击选择某条数据时候, 右上角的链接
    'link' => function($model)
    {
        return URL::route('posts.edit', $model->id);
    },
];

详细的 Model 配置信息文档请见 这里 .


文章完毕, 多读几遍 官方文档 , 这个扩展包很值得学.

熟练使用的话, 像 Laravel-blog 这种简单的项目后台配置, 20 分钟不到的时间就做完后台, 效率是很让人喜爱的.

sunglasses: :beer:


Practice makes perfect.

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 24
Summer

@wcpsoft 程序员哥们, 测试. :smile: 头像不错.

4年前
Summer

@blue5tar 请把你的测试的留言都删了, 不然我只能屏蔽你了.

4年前
Summer

@harryxu 当然, 这个东西的使用范围在 phpmyadmin手写后台 之间.

4年前
Summer

@gkrim 抱歉你的回复会被删除.

这里绝对不讨论任何有关盗版软件、音乐、电影如何获得的问题

4年前

laravel-admin 创建(create)和编辑(edit)时,如果某个字段设置了唯一,编辑时该字段没有修改也报冲突,怎么解决的。

1年前

laravel 5.5
Laravel-Administrator ^1.1.4
配置文件:

use App\Http\Model\Order_user;
......
'somekey' => array(
            'title'        => '姓名',
            'relationship' => 'order',
            'select'       => "(:table).name",
        ),
......

Order_user模型:

......
namespace App\Http\Model;
.....
public function order()
    {
        return $this->hasOne('App\Http\Model\Order_user', 'openId');
    }
......

报错:Call to undefined method Illuminate\Database\Query\Builder::getPlainForeignKey()
模型的order()方法测试没问题,但在admin中使用报错。请教一下怎么解决啊。。

1年前

ErrorException (E_WARNING)
sizeof(): Parameter must be an array or an object that implements Countable

7个月前

请问有没有人遇到过这个问题啊?

7个月前

@Summer 可以用指定的控制器可以选择的接管他的路由吗

6个月前

@Albreeze PHP 7.2 + 以上的版本不兼容问题

5个月前

7.2+ 的版本 sizeof() count()

file

5个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!