PHPackages                             zgldh/scaffold - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. zgldh/scaffold

ActiveProject[Framework](/categories/framework)

zgldh/scaffold
==============

SPA administration system scaffold made with Laravel, VueJS, ElementUI, vueAdmin-template.

v1.7.8(6y ago)4941215[2 issues](https://github.com/zgldh/scaffold/issues)[1 PRs](https://github.com/zgldh/scaffold/pulls)3MITPHPPHP &gt;=7.0.0

Since May 15Pushed 1y ago6 watchersCompare

[ Source](https://github.com/zgldh/scaffold)[ Packagist](https://packagist.org/packages/zgldh/scaffold)[ RSS](/packages/zgldh-scaffold/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (10)Dependencies (21)Versions (82)Used By (3)

zgldh/Scaffold
==============

[](#zgldhscaffold)

基于 Laravel 5.5， Vue 2， ElementUI 2， vueAdmin-template 制作的后台脚手架。

升级指南:

预制功能：
=====

[](#预制功能)

- 用户，角色，权限体系
- 文件上传
- 通知系统
- 操作记录
- 系统设置
- 完全脱离 Cookie/Session 机制。全面拥抱 JWT。自动刷新 Token
- 强化的前端数据表格，使用 datatables 协议。
- 多语言

路线图
===

[](#路线图)

- GraphQL 1.8
- Simplified role/permission 1.9
- D2Admin 2.0
- Laradock 3.0

开始使用
====

[](#开始使用)

1. `composer create-project zgldh/scaffold your-project-dir`
2. 配置好 `.env` 数据库相关
3. `php artisan scaffold:init`

    会自动执行以下命令

    - `migrate`
    - `storage:link`
    - `permission:auto-refresh`
    - `db:seed --class=ScaffoldInitialSeeder`
    - `lang:dump`
4. 配置好 `frontend/config/dev.env.js` 的 `BASE_API `
5. `npm install`
6. `npm run start`

初始帐号密码：  123456

注意：某些虚拟机中 php artisan storage:link 命令可能会失效，请在宿主主机中执行该命令。

生成器
===

[](#生成器)

名称命令模块初始化`scaffold:module {moduleName} {--force}`模型初始化`scaffold:model {modelStarterClass} {--only=*} {--force}`API 生成`scaffold:api {method} {route} {moduleName} {--controller=} {--action=}`权限生成`permission:auto-refresh {type=api : set guard name}`通知生成`notifications:create {moduleName} {notificationName}`语言文件导出`lang:dump`模块初始化
-----

[](#模块初始化)

`scaffold:module {moduleName} {--force}`

模块是指一个独立的功能领域。使用本命令将初始化一个模块。

**Example**

`scaffold:module Post`

将创建好如下目录和文件:

- `Modules/Post`
- `Modules/Post/routes.php`
- `Modules/Post/PostServiceProvider.php`
- `frontend/src/store/modules/post.js`

并自动修改好如下文件：

- `config/api.php`
- `routes/api.php`
- `frontend/src/store/index.js`

模型初始化
-----

[](#模型初始化)

`scaffold:model {modelStarterClass} {--only=*} {--force}`

模型是指数据模型，对应着一个数据表。需要一个 Starter Class 来描述该模型。

使用本命令将初始化该模型的`migration file`, `controller`, `model`, `request`, `repository`, `route`, `factory`, PHP 单元测试和前端脚手架文件。基本的 CRUD 都准备好了。

如何编写 Starter Class 请参考源码: `Modules\Post\PostStarter.php`

`--only` 取值： controller, request, repository, model, migration, api, resource, language, route, factory, phpunit 将只生成对应文件。

**Example**

`scaffold:model Modules/Post/PostStarter.php`

将创建好如下目录和文件:

- `Modules/Post`
- `Modules/Post/Controllers/PostController.php`
- `Modules/Post/Repositories/PostRepository.php`
- `Modules/Post/Models/Post.php`
- `Modules/Post/Requests/CreatePostRequest.php`
- `Modules/Post/Requests/UpdatePostRequest.php`
- `resources/lang/en/post.php`
- `resources/lang/zh-CN/post.php`
- `database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php`
- `database/factories/PostFactory.php`
- `tests/Modules/Post`
- `tests/Modules/Post/Post/PostIndexTest.php`
- `tests/Modules/Post/Post/PostStoreTest.php`
- `tests/Modules/Post/Post/PostShowTest.php`
- `tests/Modules/Post/Post/PostUpdateTest.php`
- `tests/Modules/Post/Post/PostDestroyTest.php`
- `frontend/src/api/post.js`
- `frontend/src/views/post`
- `frontend/src/views/post/Post/List.vue`
- `frontend/src/views/post/Post/Editor.vue`

并自动修改好如下文件：

- `Modules/Post/routes.php`
- `frontend/src/router/dynamicRouterMap.js`

并创建权限：

- Post@index
- Post@store
- Post@show
- Post@update
- Post@destroy

API 生成
------

[](#api-生成)

`scaffold:api {method} {route} {moduleName} {--controller=} {--action=}`

方便的生成一个单独的 API 和周边的各种类、单元测试、前台接口等。

**Example**

`scaffold:api put /post/{id}/like Post`

将创建好如下目录和文件:

- `Modules/Post/Requests/PutIdLikeRequest.php`
- `tests/Modules/Post/Post/PutIdLikeTest.php`

并自动修改好如下文件：

- `Modules/Post/Controllers/PostController.php`
- `Modules/Post/routes.php`
- `frontend/src/api/post.js`

并创建权限：

- Post@putIdLike

权限生成
----

[](#权限生成)

`permission:auto-refresh {type=api : set guard name}`

遍历 `Modules` 下所有的 `controller` 和 `repository`。 根据其公共函数生成一系列权限，并自动赋予超级管理员。

如果函数的注释内，包含有 `@no-permission` 标记，则跳过该函数。

**Example**

`permission:auto-refresh`

将自动修改对应 `model` 的语言文件的 `permissions` 数组，并创建一系列权限。

会自动跳过重复权限。

通知生成
----

[](#通知生成)

`notifications:create {moduleName} {notificationName}`

创建一个 Notification 类，和 markdown 邮件模板。

**Example**

`notifications:create post newPost`

将创建好如下目录和文件:

- `Modules/Post/Notifications/NewPost.php`
- `Modules/Post/resources/views/newPost.blade.php`

并自动修改好语言文件，请记着调整后手动执行 lang:dump：

- `resources/lang/*/notification.php`

语言文件导出
------

[](#语言文件导出)

`lang:dump`

将 PHP 语言文件导出为前端语言文件。使得前端 `vue-i18n` 组件也可使用。

导出产物储存在 `frontend/src/lang/languages.js`

组件说明
====

[](#组件说明)

内置了一些常用组件。

数据表格 zgldh-datatables
---------------------

[](#数据表格-zgldh-datatables)

改造自 `ElementUI` 的 `table` 组件。

参数：

参数名类型必填默认值说明source\[Array, Function\]truenull数据源。通常定义为一个函数。后台请实现 [datatables 协议](https://www.datatables.net/manual/server-side)titleStringfalsenull用于数据导出的文件标题autoLoadBooleanfalsetrue是否初始化完毕就立即执行载入columnSelectionBooleanfalsefalse暂时没用。 Show the column selection buttonenableSelectionBooleanfalsetrue允许选择行enableAddressBarBooleanfalsetrue允许在地址栏储存请求条件actionsArrayfalse\[\]行动作按钮。 ```
 [{Title: () => this.$i18n.t('global.terms.download'),    Handle: this.handleDownload  },  {    Title: () => this.$i18n.t('global.terms.edit'),    Handle: this.handleEdit  },  {    Title: () => this.$i18n.t('global.terms.delete'),    Handle: this.handleDelete  },  150  // Optional, the actions column width in px, or '10em' in custom width.  ]
```

multipleActionsArrayfalse\[\]表格顶部动作按钮。filtersArrayfalse\[\]高级过滤器的配置。exportColumnsObjectfalsenull导出文件的列配置。```
{  "name": this.$t('upload.fields.name'),  "description": this.$t('upload.fields.description'),  "disk": this.$t('upload.fields.disk'),  "path": this.$t('upload.fields.path'),  "size": this.$t('upload.fields.size'),  "type": this.$t('upload.fields.type'),  "created_at": this.$t('global.fields.created_at'),}
```

图标组件 auto-icon
--------------

[](#图标组件-auto-icon)

用法描述```frontend\src\icons` 里的图标`` 的图标`` 的图标`` 的图标图片上传组件 image-uploader
---------------------

[](#图片上传组件-image-uploader)

改造自 `ElementUI` 的 `el-upload` 组件

用法描述``处理一个图片的上传``处理多个图片的上传``处理多个图片的上传，最多5个TODO

预制功能说明
======

[](#预制功能说明)

1. 添加新的系统设置

    比如我们要设置一个 `theme` 项，默认值是 `sunset`。

    1. 在 `Modules\Setting\Bundles\System` 的 `defaults`函数内设置该项：

    ```
    public function defaults()
    {
        return [
            'site_name'         => '管理平台',
            'site_introduction' => '各种介绍',
            'default_language'  => 'zh-CN',
            'target_planets'    => [
                'earth',
                'mars'
            ],
            'theme'             => 'sunset' // 这是新增的设置项
        ];
    }

    ```

    2. 修改 `frontend\src\views\Setting\index.vue` 增加输入字段

    ```

    ```

    3. （可选）新增该配置项的语言配置 `resources\lang\*\setting.php`。然后 `lang:dump` 如：

    ```
    'bundles' => [
        'system' => [
            ...
            'theme'         => '主题',
            ...
        ]
    ]

    ```
2. 使系统设置生效

    初始化好以后，系统设置只会保存设置值，但目前版本不会有任何实际作用。请手工修改类 `Modules\Setting\Bundles\System`

    注意观察里面的 `setSiteName` 和 `setDefaultLanguage` 函数，他们是当设置项的值真正改变前的钩子函数。

    你可以在这里做任何额外操作，然后将最终的设置项的值返回即可。
3. 为某模型添加图片关联

    比如想为`User`模型添加`images`属性作为该用户的相册。

    首先在`User`模型添加关系：

    ```
    public function images()
    {
        return $this->morphMany(Upload::class, 'uploadable')->where('z_uploads.type', __FUNCTION__);
    }

    ```

    然后在`frontend\src\views\user\Editor.vue`添加`images`参数以及`ImageUploader`。

    ```
    data() {
      return {
        ...
        form: {
          id: null,
          ...
          images:[] // 新添加的参数
        }
      };
    }

    ```

    ```
    _with=images

    ```

    ```

    ```

常用操作
====

[](#常用操作)

1. 添加一个前端页面
    1. 在 `frontend/views` 下创建该页面。 建议储存到合理的子文件夹下。
    2. 在 `frontend\src\router\dynamicRouterMap.js` 里添加路由。
    3. 注意路由的 meta.title 可以设置成函数来实现多语言。
2. ...

感谢
==

[](#感谢)

###  Health Score

41

↑

FairBetter than 89% of packages

Maintenance29

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity73

Established project with proven stability

 Bus Factor1

Top contributor holds 92.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~12 days

Recently: every ~96 days

Total

75

Last Release

2368d ago

Major Versions

v0.9.5 → v1.0.12018-07-05

PHP version history (2 changes)0.1.0PHP &gt;=5.6.4

0.2.0PHP &gt;=7.0.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/6d823b6a23c0353181880a192e27ea65b9ed08387338bb78c3af727c3546f354?d=identicon)[zgldh](/maintainers/zgldh)

---

Top Contributors

[![zgldh](https://avatars.githubusercontent.com/u/312404?v=4)](https://github.com/zgldh "zgldh (180 commits)")[![wengyuli](https://avatars.githubusercontent.com/u/468451?v=4)](https://github.com/wengyuli "wengyuli (8 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![django-wong](https://avatars.githubusercontent.com/u/4019240?v=4)](https://github.com/django-wong "django-wong (1 commits)")[![renkun](https://avatars.githubusercontent.com/u/1890038?v=4)](https://github.com/renkun "renkun (1 commits)")

---

Tags

laravelscaffoldspavuejsframeworklaravelscaffoldSPA

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/zgldh-scaffold/health.svg)

```
[![Health](https://phpackages.com/badges/zgldh-scaffold/health.svg)](https://phpackages.com/packages/zgldh-scaffold)
```

###  Alternatives

[krayin/laravel-crm

Krayin CRM

22.0k32.8k1](/packages/krayin-laravel-crm)[bagisto/bagisto

Bagisto Laravel E-Commerce

26.2k161.6k7](/packages/bagisto-bagisto)[unopim/unopim

UnoPim Laravel PIM

9.4k1.8k](/packages/unopim-unopim)[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[marketplacekit/marketplacekit

Open source Marketplace Platform

8185.2k](/packages/marketplacekit-marketplacekit)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
