Speedy - 简洁灵活的 Laravel 管理后台
50

Speedy是基于 vue2 + bootstrap 的 laravel 管理后台,能够快速开发好一个权限后台,而且能够非常方便的生成一级或者二级菜单。

项目地址: https://github.com/HanSon/speedy

欢迎前来 star 以及提 issue !

file

安装

laravel 5.1 以上:

composer require hanson/speedy

laravel 5.1 :

composer require hanson/speedy:~v0.5.0

配置

添加服务提供者

添加 Hanson\Speedy\SpeedyServiceProvider::class,app.phpproviders

发布资源

php artisan vendor:publish --provider="Hanson\Speedy\SpeedyServiceProvider"

修改配置

Speedy 的配置在 config/speedy.php 中,涉及Model的命名空间以及表名(Speedy 会根据配置生成 Models 以及 Migration)

return [
    'class' => [
        'namespace' => 'App\\Models\\',
        'model' => [
            'role' => 'Role',
            'user' => 'User',
            'permission' => 'Permission',
            'permission_role' => 'PermissionRole',
        ]
    ],

    'table' => [
        'role' => 'role',
        'permission' => 'permission',
        'user' => 'users',
        'permission_role' => 'permission_role',
    ],
    // ...
]

安装 Speedy

php artisan speedy:install
此命令将会

  • 执行 migration
  • 生成 models
  • 执行 seeder , 生成默认的角色 admin
  • 根据 menu 生成 permission
  • web.php 生成相关路由

创建管理员

php artisan speedy:admin admin@email.com --create
或者设置已有用户为管理员
php artisan speedy:admin admin@email.com
(PS: 没错,这里是 voyager 的代码)

也许你想直接用 laravel 自带的 auth

php artisan make:auth
在生成的 LoginController 中, 修改 $redirectTo = '/home'$redirectTo = '/admin'
记得更改 auth.phpproviders
providers['users']['model'] => App\Models\User::class

运行

执行 php artisan serve 后, 访问 http://localhost:8000/admin 开启你的 Speedy 之旅吧

文档

Speedy 比较适合开发一些简单权限的后台,不适合于复杂的权限管理。
在 Speedy 中,一个菜单将会生成一个权限,当一个用户用户这个菜单的权限时,意味着这个用户能够使用该菜单的所有功能。

菜单

通过修改 config/speedy.php 的 menus ,然后执行 php artisan speedy:menu 将自动刷新权限、菜单,并且赋予管理员所有权限。
菜单的属性主要有

  • display 菜单显示名称
  • url 当前菜单URL
  • sub 是否二级菜单,包含着多个子菜单,当设置了此参数时,将会忽略参数 url
  • target 跳转方式,默认当前打开

页面

Speedy 的页面在 resources/views/vendor/speedy 中,在 resources/views/vendor/speedy/layouts/app.blade 中,你可以给一些资源替换一些国内的CDN (使用默认的app.js 以及 app.css 会出现奇怪的问题,例如二级菜单箭头刷不出,JS 报错,然而版本都是一致的)

中间件

Speedy 配有中间件 Hanson\Speedy\Http\Middleware\SpeedyAdminMiddleware 进行权限验证
Controller 可以继承 Hanson\Speedy\Http\Controllers\BaseController , 并重写属性 permissionName 为菜单的key即可验证权限

语言

Speedy 内置了中文语言包,源自

config/app.php 中设置 localezh-cn 即可

resource/lang/zh-cn/view.php 为页面的内容
resource/lang/zh-cn/attribute.php 为表单验证的字段,可参考 config/validator 的key

表单验证

表单验证的 rules 位于 config/validator

Speedy Vs Voyager

Voyager 是一个很出色的 laravel 后台管理包,能够很好的在后台添加所需要的表单,设置其字段,达到不需要敲代码也能完成后台开发工作。但本人觉得 Voyager 有点过于使用资源,导致每个页面都会引入一堆的 CSS 以及 JS,要想去掉也是比较麻烦的事情。路由也比较庞大,也许在高配的开发电脑上体验不到,但在我家用电脑跟公司比较下,差距就放大了很多倍了。

权限思想不一样是两者最大的区别, Speedy 的权限比较特殊,没有细化到某个功能,只有某个模块,非常适合一些小型项目或者对权限要求不复杂的项目。权限并没有直接在管理后台中修改,而是通过修改菜单时才生成权限。只引入了 bootstrap 以及 vue 2 去控制页面,尽最大可能简化页面。

PS:其实一开始,我只是想写个sidebar,没想到写了个后台

php吹水交流群 570769430

本帖由 Summer 于 1年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 34

laravel 5.3中,

$router->aliasMiddleware('speedy.auth', SpeedyAdminMiddleware::class);

使用的aliasMiddleware好像不存在?

1年前
Hanson

@alexleeyy 感谢,已修复,增加支持laravel 5.*

1年前
Enda
<tbody>
                                @foreach($roles as $role)
                                <tr>
                                    <th scope="row">{{ $role->id }}</th>
                                    <td>{{ $role->name }}</td>
                                    <td>{{ $role->display_name }}</td>
                                    <td>{{ $role->created_at }}</td>
                                    <td>
                                        <a href="{{ route('admin.role.edit', ['id' => $role->id]) }}">{{ trans('view.admin.public.edit') }}</a>
                                        <a href="javascript:;" onclick="document.getElementById('delete-form').action = '{{ route('admin.role.index') . "/{$role->id}" }}'" data-toggle="modal" data-target="#deleteModal">{{ trans('view.admin.public.destroy') }}</a>
                                    </td>
                                </tr>
                                @endforeach
                            </tbody>

没看到 Vue2 用在哪呀

1年前
Hanson

@Enda sidebar中,没采用前后端分离

1年前
Mantis

php artisan vendor:publish --provider="Hanson\Speedy\SpeedyServiceProvider"

[Symfony\Component\Debug\Exception\FatalThrowableError]
Call to undefined function Hanson\Speedy\resource_path()

是什么情况?Laravel5.1......

file

1年前
Hanson

@chunlintang 当前release不支持5.1,可以执行
composer require hanson/speedy:~v0.5.0安装

5.2 开始的变动不是一般的大。

1年前

按照文档安装后出现

Call to undefined method Illuminate\Database\Query\Builder::getMenus() (View: /Library/WebServer/Documents/speedy/resources/views/vendor/speedy/layouts/app.blade.php)
1年前
Hanson

@skys215 你的User model要用生成的User Model,或者用已有的use model 加上 trait permissionTrait

1年前
Hanson

@skys215 估计你是 auth.php 里面的model没改过来

1年前
PS:其实一开始,我只是想写个sidebar,没想到写了个后台

1年前

@Hanccc 哦哦,现在可以了。好像文档里没有写明这点啊?不管是中文文档还是英文文档。

1年前
Hanson
记得更改 auth.php 的 providers
providers['users']['model'] => App\Models\User::class

@skys215 这里有写的

1年前

@Hanccc :sweat_smile:我搜的是config/auth.php

还有一个问题,在我这儿会这样:

file

没滚动条,左侧菜单栏也不能隐藏。

我还没碰过生成的代码的说,难道又是我哪里搞错了?

1年前
Hanson

@skys215 你的屏幕是多少寸的?

1年前

@Hanccc 25寸 2560*1080的,但是我有分屏,浏览器占一半。所以应该是1280*1080。

1年前
Hanson

@skys215 这是我的前端兼容没做好,但你最大化应该不会了吧,我上面的截图是24寸截图的,正常的效果

1年前

@Hanccc 好的。

最大化确实不会,但是我这屏幕最大化窗口就浪费空间了 :joy:

1年前
Hanson

@skys215 这个我在2.0的版本会优化一下

1年前

@Hanccc 好的,谢谢。

1年前
Hanson

@skys215 或者你会改前端也可以提PR

1年前
丁海军

首页没有权限判断,普通用户默认不想让访问后台,应该怎么实现

1年前
Hanson

@丁海军 第一,确认后台是否需要首页

如果需要,可以把默认的去掉,菜单栏增加后台首页,登录默认跳转到后台首页。

如果不需要,直接去掉这个首页即可。

大部分代码都不在vendor中,可以改的比较随心所欲

1年前
Hanson

@丁海军

如果需要首页,就在菜单栏增加“后台首页”,登录跳转的代码改成根据权限判断跳转即可

如果不需要,直接去掉即可

大部分代码都不在vendor中,改的可以比较随心所欲

1年前
丁海军

@Hanccc 明白了

1年前
Hanson

@skys215 自适应的问题最新版本已修复

1年前

5.4 安装后访问/admin 提示,楼主帮忙看看·

1/1 InvalidArgumentException in UrlGenerator.php line 304:
Route [login] not defined.
1年前
Hanson

@wind 你是没跑 php artisan make:auth

1年前

您好!您这个左侧菜单是没有页面生成的吗?要手动填写数据库吗?我没看见有这个功能呢

1年前
Hanson

@丑男来了 有生成blade模板的

1年前

@Hanccc 那个我想生成多一个菜单的话,需要怎么操作呢?O(∩_∩)O谢谢

1年前

设置子菜单后,点击子菜单整个页面刷新,左侧菜单也刷新了。

10个月前

@mjgdjh 我1366*786的屏幕,最大化就这样了

6个月前

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