innovmt/mt-jetstream-inertia-generator

使用 Laravel Jetstream、Inertiajs、Vue.js、Pagetables 和 Tailwindcss 的 Admin CRUD 生成器。项目改编自 coolsam726/jetstream-inertia-generator

1.0.0 2021-08-25 10:40 UTC

This package is not auto-updated.

Last update: 2024-09-20 00:08:18 UTC


README

Latest Version on Packagist GitHub code size in bytes Travis (.com) Build Scrutinizer build Total Downloads

Jetstream Inertia Generatorjig,允许您生成与 Laravel 项目兼容的简单 Admin CRUD(创建、读取、更新、删除)代码,该项目由 Jetstream - Inertia - Vue.js 堆栈提供支持。

场景

您正在开发一个下一代项目。数据模型复杂。需要管理员管理多个 CRUD,以支持主要终端用户功能。您不希望花费 几天甚至几个月 来为所有 CRUD 编写样板代码。如果是这样,这个包将帮助您。只需遵循以下简单步骤

  • 为您的 CRUD 表生成迁移,例如 articles,并运行 php artisan migrate(约 2 分钟
  • 使用此包,只需运行 php artisan jig:generate articles(约 3 秒!!!
  • 构建您的 CSS 和 JavaScript(约 27 秒)完成!在约 2 分钟半 内,您将获得一个完全工作的模块,包括 -
  • 模型
  • 管理员控制器 - Index、Create、Show、Edit、Store、Update、Delete
  • API 控制器 - Index、Store、Show、Update、Delete
  • 一个授权策略 - viewAny、view、create、update、delete、restore、forceDelete
  • spatie/laravel-permissions 生成的权限 - articles、articles.index、articles.create、articles.show、articles.edit、articles.delete
  • 前端菜单条目
  • 前端数据表,包含操作,归功于使用 Yajra Datatables 和 datatables.net
  • Tailwindcss 驱动的 CREATE 和 EDIT 表单
  • Tailwindcss 驱动的 SHOW 视图
  • Web 和 API 路由
  • 验证和授权请求类

还能要求什么?将一天的工作缩短到不到 3 分钟。

依赖项

如果您已遵循 Jetstream - Inertia - Vue.js 安装说明,则项目将使用最小配置运行。其他重要依赖项,您必须配置包括

  1. Spatie Laravel Permissions - 用于管理角色和权限。其迁移将在资产发布期间发布,之后您可以继续配置用户特性。
  2. Laravel Sanctum - 用于管理 API 和状态化认证。由于整个应用程序将是一个单页应用程序,请确保您已在 app/Http/Kernel.php 中配置 sanctum 中间件,如下所示
'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    ...
],

安装

  1. 您可以通过 composer 安装此包
composer require savannabits/jetstream-inertia-generator
  1. 通过运行以下命令安装必要的 npm 开发依赖项:如果您正在使用 npm
npm install --include=dev --legacy-peer-deps @headlessui/vue pagetables popper.js @babel/plugin-syntax-dynamic-import dayjs dotenv numeral portal-vue postcss postcss-import pusher-js laravel-echo sass sass-loader vue3-vt-notifications vue-flatpickr-component  vue-numerals vue-pdf mitt "https://github.com/sagalbot/vue-select/tarball/feat/vue-3-compat"

或者如果您正在使用 yarn

yarn add -D @headlessui/vue pagetables popper.js @babel/plugin-syntax-dynamic-import dayjs dotenv numeral portal-vue postcss postcss-import pusher-js laravel-echo sass sass-loader vue3-vt-notifications vue-flatpickr-component  vue-numerals vue-pdf mitt "https://github.com/sagalbot/vue-select/tarball/feat/vue-3-compat"

请随意配置您自己的颜色调色板,但为了保证一致性,请务必包括primarysecondarysuccessdanger变体,因为它们在jig模板中使用。3. 发布包的资产、配置、模板、组件和布局。这是您获取管理布局和所有生成代码中使用的vue组件所必需的。

选项1(适用于全新安装)

php artisan vendor:publish --force --provider="innovmt\MTJetstreamInertiaGenerator\JetstreamInertiaGeneratorServiceProvider"

选项2(如果您正在升级包或已对本地更改不希望覆盖,则很有用。)注意:如果您只想更新一些已发布的文件,请仅删除要更新的已发布文件,然后运行以下相应的命令

php artisan vendor:publish --tag=jig-blade-templates #Publishes resources/views/app.blade.php. If it already exists, use --force to replace it
php artisan vendor:publish --tag=jig-config #Publishes the config file. If it exists use --force to replace it.
php artisan vendor:publish --tag=jig-routes #Publishes routes/jig.php to hold routes for generated modules.If you have already generated some routes, be sure to back them up as this file will be reset if you --force it.
php artisan vendor:publish --tag=jig-views #publishes Vue Components, app.js, bootstrap.js and Layout files. Use --force to force replace
php artisan vendor:publish --tag=jig-assets #publishes logos and other assets
php artisan vendor:publish --tag=jig-compiler-configs #publishes webpack.config.js and tailwind.config.js
php artisan vendor:publish --tag=jig-migrations #Publish database migrations
  1. 然后通过发布其迁移来完成spatie/laravel-permission的安装步骤。
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

注意:当第一次生成CRUD时,将自动将title字段添加到rolespermissions表中。

  1. JigMiddleware添加到全局中间件和app/Http/Kernel.php中的web中间件组。
protected $middleware = [
    ...,
    \innovmt\MTJetstreamInertiaGenerator\Middleware\JigMiddleware::class,
];

protected $middlewareGroups = [
    'web' => [
        ...,
        \innovmt\MTJetstreamInertiaGenerator\Middleware\JigMiddleware::class,
    ],
];
  1. 通过在app/Http/Kernel.php中的api中间件组中添加以下内容,允许Sanctum API的第一方访问
protected $middlewareGroups = [
    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        ...
    ],
];
  1. 修改.env以包含以下键
APP_BASE_DOMAIN=mydomain.test
APP_SCHEME=http #or https
#optional mix_app_uri (The path under which the app will be served. It is recommended to run the app from the root of the domain.
MIX_APP_URI= 
APP_URL=${APP_SCHEME}://${APP_BASE_DOMAIN} #If MIX_APP_URI is empty.
#APP_URL=${APP_SCHEME}://${APP_BASE_DOMAIN}/${MIX_APP_URI} #If MIX_APP_URI is not empty.

# Append the following key to your .env to allow 1st party consumption of your api:
SANCTUM_STATEFUL_DOMAINS="${APP_BASE_DOMAIN}" #You can add other comma separated domains
  1. 创建storage:link(请参阅laravel文档),以便通过web访问公共磁盘资产(例如徽标)
php artisan storage:link

用法

初始种子管理用户和角色

当您运行php artisan vendor:publish --tag=jig-migrations时,会发布一个迁移,创建一个名为Administrator的初始默认用户和一个名为administrator的角色,以使您能够以管理员权限访问系统。用户账户的凭据如下:

在迁移后使用这些凭据登录并探索应用程序的所有部分

首先按顺序创建权限、角色和用户模块

在生成管理之前,运行以下命令以生成用户访问控制模块

php artisan jig:generate:permission -f
php artisan jig:generate:role -f
php artisan jig:generate:user -f

现在您可以使用以下部分的步骤生成您想要的任何其他CRUD。

生成CRUD的一般步骤

  1. 使用php artisan make:migration命令生成您表的迁移和写入迁移。
  2. 使用php artisan migrate命令将迁移运行到数据库中
  3. 使用php artisan jig:generate命令生成模块的完整管理脚手架
  4. 如果需要,修改和自定义生成的代码以符合您的具体要求。注意:如果CRUD已存在,并且您想要生成,则可以使用-f--force选项强制替换文件。

示例

假设您想生成一个books

php artisan make:migration create_books_table
  • 打开您的迁移并根据需要修改它,添加您的字段。然后运行迁移。
php artisan migrate
  • 有趣的部分:使用jig使用以下命令为书籍创建整个管理模块
php artisan jig:generate books #Format: php artisan generate [table_name] [-f]

注意:要获取在幕后调用的所有jig命令的完整列表以及jig:generate命令的完整说明,您可以运行以下

php artisan jig --help
php artisan jig:generate --help

上述命令将生成多个文件,并将路由添加到您的api.phpweb.php路由文件中。它还会将菜单条目追加到已发布的Menus.json文件中。生成的vue文件放置在js文件夹中的Pages/Books文件夹下。

  • 最后,运行yarn watch, yarn dev或yarn prod来编译资产。这样,您就有了CRUD。

角色、权限和侧边栏菜单

  • 默认情况下,模块生成会生成以下权限

    • index
    • create
    • show
    • edit
    • delete
  • 权限的命名约定是${module-name}.${perm},例如payments.index,users.create等。

  • 此包使用策略来管理访问控制。每个生成的模块都生成一个策略,带有默认的laravel操作。

    • viewAny, view, store, update, delete, restore, forceDelete 上述生成的权限在这些策略中进行检查。如果您需要修改任何访问权限,请查看策略。
  • 还需要生成特殊的权限来控制侧边栏菜单的访问。这些权限不应该包含由点分隔的两个部分,而应该只有一个部分。

  • 菜单在位于 ./resources/js/Layouts/Jig/Menu.json 的 json 文件中进行配置。

    • 对于所有菜单项,json 键必须与控制该菜单的权限匹配。在为每个模块生成时,会生成一个不带动词的权限,用于此目的。例如,生成一个 payments 模块将生成一个 payments 权限。然后,支付菜单的 json 键必须是 payments
    • 对于父菜单和可能不匹配任何模块的其他菜单,您必须创建一个具有键名的权限来控制其访问。例如,如果您有一个名为 master-data 的父菜单,您必须生成一个具有相同名称的权限。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全

如果您发现任何安全问题,请通过电子邮件 maosa.sam@gmail.com 而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件