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

分享 Summer ⋅ 于 3年前 ⋅ 最后回复由 KubiLi 2周前 ⋅ 17767 阅读

说明

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

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:

本文章首发在 Laravel China 社区

Practice makes perfect.

本帖已被设为精华帖!
回复数量: 24
  • Summer MOD A Life-long learner.
    3年前

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

  • gkrim
    3年前

    @Summer symfony2也有类似的东西SonataAdminBundle,不过好像具体在实际项目中没多大用,除了开发一些简单的网站外,还是建议去themeforest.net上选一套静态的后台模板,google一下把免费的下载来搞,配上自己开发的后台会更加使用美观,纯属个人看法

  • zhuzhichao Lalala Demacian !
    3年前

    赞!正需要做个后台,准备用这个试试!:+1:

  • youngsterxyf
    3年前

    赞一个:+1:

  • Summer MOD A Life-long learner.
    3年前

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

  • monkey 最重要的事,永远只有一件
    3年前

    先用着试试感觉

  • gold3bear
    3年前

    真赞!

  • gold3bear
    3年前

    @gkrim themeforest.net看上去不错

  • harryxu
    3年前

    说实话不太喜欢这个,简单用用还行,但是要扩展或者自定义页面就会很麻烦。

  • Summer MOD A Life-long learner.
    3年前

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

  • Summer MOD A Life-long learner.
    3年前

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

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

  • gold3bear
    3年前

    这是要私下交流的节奏

  • feilengcui
    3年前

    这个太赞了,正在学习laravel,写了个简单的博客,最近在写管理系统,花了时间还没这个方便。。

  • kslr
    3年前

    我碰到了一些问题,后台的静态资源加载地址是错误的 比如 http://www.xxx.org/packages/frozennode/administrator/js/jquery/select2/select2_locale_zh.js 如此该如何修复呢?

    laravel 4.2

  • kslr
    3年前

    我想我找到原因了,该扩展看起来只支持3版本

  • kelezyl
    2年前

    设置中文时出现的:Call to a member function put() on a non-object。是否是因为使用的laravel版本是5.0的问题呢?

  • long1774341213
    9个月前

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

  • Cynthia i'm nothing
    7个月前

    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中使用报错。请教一下怎么解决啊。。

  • Albreeze
    2个月前

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

  • Albreeze
    2个月前

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

  • 传说中的五毛
    1个月前

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

  • KubiLi
    3周前

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

  • KubiLi
    3周前

    7.2+ 的版本 sizeof() count()

    file

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档