通过 Nebula 扩展包构建基于 Laravel + Alpine + Tailwind 的后台管理系统
简介
Nebula 是一个最小化的、易于上手的 Laravel 后台管理扩展包,当然了,Laravel 后台管理扩展包现如今已如过江之鲫,可谓俯拾即是,比较流行的免费扩展包有 Voyager、Laravel Admin 等。
Nebula 与它们的不同之处在于前端使用新兴的 Alpine.js + Tailwind CSS 框架构建,和大多数后台管理扩展包一致的是,Nebula 通过提供功能强大的 CLI、指标统计和表单构建功能,让开发者可以专注于业务逻辑,减少构建重复的 CRUD 模板代码。
功能特性
Nebula 目前支持以下特性:
- CLI 脚手架
- CRUD 资源模板代码
- 管理后台
- 翻译
- 表单字段
- 过滤器
- 指标统计
- 自定义
安装配置
要使用 Nebula 构建后台管理系统,需要在项目根目录下先通过 Composer 安装这个扩展包:
composer require larsklopstra/nebula
安装完成后,通过如下 Artisan 命令发布它的前端资源和配置文件:
php artisan nebula:install
这样一来,就可以通过 /nebula
路由访问基于 Nebula 驱动的后台管理页面了:
使用 Sail 作为开发环境
需要注意的是 Nebula 扩展包现在尚不支持 PHP 8.0,如果使用的是 Sail 作为本地开发环境(默认 PHP 版本是 8.0),则需要将 PHP 版本切换到 7.4,为了便于对 Sail 进行自定义,可以发布其 Dockerfile
文件到项目根目录下:
sail artisan sail:publish
然后将 docker-compose.yml
文件中应用容器 PHP 版本调整为 7.4:
services:
redis.test:
build:
context: ./docker/7.4
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
CHANGE_SOURCE: 'true'
image: sail-7.4/app
如果因为网络问题导致 Docker 镜像构建过程中软件源下载/更新慢,可以参考 Laradock 修改镜像源的方式修改 Sail 的 Dockerfile
构建指令,然后在容器构建参数中通过 CHANGE_SOURCE
配置是否需要修改镜像源:
ARG CHANGE_SOURCE=false
RUN if [ ${CHANGE_SOURCE} = true ]; then \
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list \
;fi
重新构建 & 启动应用容器服务:
sail build --no-cache
sail down --remove-orphans
sail up -d
接下来,运行如下命令在 Sail 中通过 Composer 安装 Nebula 扩展包:
APP_SERVICE=redis.test sail composer require larsklopstra/nebula
如果因为网络问题导致 Composer 下载慢,可以为当前项目配置镜像地址进行加速。
由于修改了默认的应用名称 laravel.test
,所以显式指定了 APP_SERVICE
值为 redis.test
,否则会报错(后续所有 sail
命令都要显式指定该配置值)。
再通过如下命令运行 Sail 中的 Artisan 命令:
APP_SERVICE=redis.test sail artisan nebula:install
如果你觉得每次指定 APP_SERVICE=redis.test
太麻烦,可以通过 export
命令将其设置到系统环境变量:
export APP_SERVICE=redis.test
这样,就可以直接运行 sail
命令了:
如果你想要调整管理后台的默认路由,可以修改配置文件 config/nebula.php
中的 prefix
配置项:
'prefix' => '/admin',
这样就可以通过 /admin
访问应用的管理后台了:
快速上手
更多关于 Nebula 扩展包构建的管理后台功能特性的使用细节,请参考 Nebula 官方文档,这里就不一一展开了。
2 Comments
可以,不仅能学编程还能学成语。 「过江之鲫」「俯拾即是」
哈哈 不要让你如坐针毡 如芒在背 如鲠在喉就好 ?