savannabits / jetstream-inertia-generator
使用 Laravel Jetstream, Inertiajs, Vue.js, Pagetables 和 Tailwindcss 开发的 CRUD 生成器
Requires
- php: ^7.4|^8.0
- ext-json: *
- doctrine/dbal: ^3.1
- inertiajs/inertia-laravel: >=0.6
- innocenzi/laravel-vite: >=0.3
- laravel/framework: >=8
- laravel/helpers: ^1.4
- laravel/jetstream: ^2.3
- spatie/laravel-permission: ^4.2|^5
- yajra/laravel-datatables: ^1.5
Requires (Dev)
- orchestra/testbench: ^v6.0
- phpunit/phpunit: ^9.4
- dev-main
- v3.4.0
- v3.3.0
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.0
- v3.1.0-beta.0
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v3.0.0-beta.3
- v3.0.0-beta.2
- v3.0.0-beta.1
- v3.0.0-beta.0
- v2.x-dev
- v2.4.0
- v2.4.0-beta.1
- v2.3.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2024-09-17 09:28:18 UTC
README
⚠️ 我们将维护此存储库直到 Laravel 9,因为我们继续改进其继任者,Savannabits/Acacia,它更易于管理,模块化,并且完全独立于您的主应用程序。请查看它,如果您喜欢它,请给它一个星标。感谢您的支持!
Jetstream Inertia Generator 即 jig 允许您生成与 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 分钟半 内,您将获得一个完全工作的模块,包括 -
- 模型
- 管理员控制器 - 列表、创建、显示、编辑、存储、更新、删除
- API 控制器 - 列表、存储、显示、更新、删除
- 授权策略 - 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 分钟。
我不喜欢配置,给我一个可以工作的代码!
不用担心。如果以下步骤太多,我们有一个几乎无需设置的启动模板,您可以使用它来开始项目而无需以下初始配置。请查看 JIG 模板 以开始。只需点击 使用此模板。
依赖关系
如果您已按照 Jetstream - Inertia - Vue.js 安装说明 操作,则项目将具有最少的配置即可工作。其他重要依赖项,您必须配置包括
- Spatie Laravel Permissions - 这用于管理角色和权限。其迁移将在资产发布期间发布,之后您可以继续配置用户特征。
- Laravel Sanctum - 用于管理API和状态认证。由于整个应用将是一个单页应用,请确保您已在
app/Http/Kernel.php
中配置了sanctum中间件,如下所示
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, ... ],
如果您使用的是v2.x版本
注意:本文档适用于JIG的v3.x版本。如果您使用的是v2.x,请在此处访问v2.x文档
安装前
- 确保您已安装带有
inertia
的laravel/jetstream
。
安装
- 您可以通过Composer安装此包
composer require savannabits/jetstream-inertia-generator
⚠️ 1. 在继续之前,请确保您已安装带有
inertia
的laravel/jetstream
。⚠️ 2. 第一步将安装spatie/laravel-permission。在继续之前,请确保您已发布了此包的迁移,以便创建角色和权限表。
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
💡 注意:当第一次生成CRUD时,将自动将
title
字段添加到roles
和permissions
表中。 ::
- 通过运行以下命令安装必要的
npm
开发依赖项:如果您使用的是npm
npm install --include=dev --legacy-peer-deps @headlessui/vue @inertiajs/inertia @inertiajs/inertia-vue3 @vitejs/plugin-vue popper.js @babel/plugin-syntax-dynamic-import dayjs dotenv numeral postcss postcss-import pusher-js laravel-echo laravel-vite sass sass-loader vite vue@^3.1 vue3-vt-notifications vue-flatpickr-component vue-numerals mitt vue-select@^4 dynamic-import-polyfill
或者如果您使用的是yarn
yarn add -D @headlessui/vue @vitejs/plugin-vue @inertiajs/inertia @inertiajs/inertia-vue3 popper.js @babel/plugin-syntax-dynamic-import dayjs dotenv numeral postcss postcss-import pusher-js laravel-echo laravel-vite sass sass-loader vite vue@^3.1 vue3-vt-notifications vue-flatpickr-component vue-numerals mitt vue-select@^4 dynamic-import-polyfill
您可以根据自己的喜好配置颜色调色板,但为了统一,请确保包括primary
、secondary
、success
和danger
变体,因为它们在jig模板中使用。
- 发布包的资产、配置、模板、组件和布局。这对于您获取管理员布局和在生成代码中使用的所有vue组件是必要的
选项1(适用于全新安装)
php artisan vendor:publish --force --provider="Savannabits\JetstreamInertiaGenerator\JetstreamInertiaGeneratorServiceProvider"
选项2(如果您正在升级包或已对本地更改不希望覆盖的情况很有用。)NB:如果您只想更新一些已发布的文件,请仅删除您想要更新的已发布文件,然后运行以下适当的命令
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-scripts #publishes main.ts and Layout files. Use --force to force replace php artisan vendor:publish --tag=jig-css #publishes app.css. 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 postcss.config.js,vite.config.js, tsconfig.json and tailwind.config.js php artisan vendor:publish --tag=jig-seeders #Publish database Seeders
- 将
JigMiddleware
添加到app/Http/Kernel.php
中的web
中间件组
protected $middlewareGroups = [ 'web' => [ ..., \Savannabits\JetstreamInertiaGenerator\Middleware\JigMiddleware::class, ], ];
- 通过在
app/Http/Kernel.php
中的api
中间件组中添加以下内容,允许对Sanctum API的第一方访问
protected $middlewareGroups = [ 'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, ... ], ];
- 修改.env以包含以下键
APP_BASE_DOMAIN=mydomain.test # or https APP_SCHEME=http #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= #If MIX_APP_URI is empty. APP_URL=${APP_SCHEME}://${APP_BASE_DOMAIN} #If MIX_APP_URI is not empty. #APP_URL=${APP_SCHEME}://${APP_BASE_DOMAIN}/${MIX_APP_URI} # Append the following key to your .env to allow 1st party consumption of your api: #You can add other comma separated domains SANCTUM_STATEFUL_DOMAINS="${APP_BASE_DOMAIN}"
- 创建storage:link(参见Laravel文档),以便通过Web访问公共磁盘资产(例如徽标)
php artisan storage:link
- 对于
v3
仅,将您的package.json
中的scripts
设置如下
"scripts": { "dev": "vite", "build": "vite build", "serve": "vite preview" },
- 通过在
config/jetstream.php
中的'features'
下取消注释以下行来启用个人照片
Features::profilePhotos(),
- 运行迁移和种子
php artisan migrate php artisan db:seed --class SeedAdminRoleAndUser
- 现在使用
vitejs
构建npm依赖项
yarn dev #Start the vitejs development server yarn build #build assets for production
🚀 您现在可以生成CRUD了!🎉
用法
初始种子管理员用户和角色
当您运行php artisan vendor:publish --tag=jig-migrations
时,会发布一个迁移,创建一个名为Administrator
的默认用户和一个名为administrator
的角色,以便您能够以管理员权限访问系统。用户账户的凭据如下:
- 邮箱:admin@savannabits.com
- 密码:password
在迁移后使用这些凭据登录并探索应用程序的所有部分
首先按顺序创建权限、角色和用户模块
在生成管理员之前,运行以下命令以生成用户访问控制模块
php artisan jig:generate:permission -f php artisan jig:generate:role -f php artisan jig:generate:user -f
您现在可以按照以下部分中的步骤继续生成您想要的任何其他CRUD。
生成CRUD的一般步骤
- 使用
php artisan make:migration
命令生成您的表的迁移并编写迁移。 - 使用
php artisan migrate
命令将迁移运行到数据库中 - 使用
php artisan jig:generate
命令为模块生成整个管理员界面 - 如有必要,请修改和自定义生成的代码以满足您的特定需求。__注意:如果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.php
和web.php
路由文件中。它还会将菜单项追加到发布的Menus.json
文件中。生成的vue文件放置在js文件夹下的Pages/Books文件夹中。
- 最后,运行
yarn dev 或 yarn build
来编译资产。这样您就有了您的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
权限。然后支付菜单必须将payments
作为json键。 - 对于父菜单和其他可能不匹配任何模块的菜单,您必须创建一个具有相同键名的权限来控制其访问。例如,如果您有一个名为
master-data
的父菜单,您必须生成一个具有相同名称的权限。
- 对于所有菜单项,json键必须与控制该菜单的权限相匹配。生成每个模块时,都会生成一个不包含任何动词的权限,为此目的。例如,生成一个
组件文档
Datatables
JIG建立在datatables.net之上,并使用Yajra Datatables完全在服务器端渲染。大部分逻辑位于App\Repositories
内,在相应的仓库文件中,有一个名为dtColumns
的方法,用于完全控制索引页面显示的列。
例如,为了控制用户数据表的显示列,以下是位于App\Repositories\Users.php
下的dtColumns
方法
public static function dtColumns(): array { return [ Column::make('id')->title('ID')->className('all text-right'), Column::make("name")->className('all'), Column::make("first_name")->className('none'), Column::make("last_name")->className('none'), Column::make("middle_name")->className('none'), Column::make("username")->className('min-desktop-lg'), Column::make("email")->className('min-desktop-lg'), Column::make("gender")->className('min-desktop-lg'), Column::make("dob")->className('none'), //Column::make("email_verified_at")->className('min-desktop-lg'), Column::make("activated")->className('min-desktop-lg'), Column::make("created_at")->className('min-tv'), Column::make("updated_at")->className('min-tv'), Column::make('actions')->className('min-desktop text-right')->orderable(false)->searchable(false), ]; }
注意:为了从我的索引列中省略email_verified_at
类,我只需要将其注释掉(或者更好一点,直接从列列表中删除它!)
数据表默认是响应式的(有关详细信息,请参阅https://datatables.net.cn/extensions/responsive/)。为此,您可以使用jig提供的以下响应式断点自动折叠给定屏幕大小下的列。有关如何使用类逻辑的信息,请参阅类逻辑文档。我通常只使用min-
,例如min-desktop-l
breakpoints: [ { name: "tv", width: Infinity }, { name: "desktop-l", width: 1536 }, { name: "desktop", width: 1280 }, { name: "tablet-l", width: 1024 }, { name: "tablet-p", width: 768 }, { name: "mobile-l", width: 480 }, { name: "mobile-p", width: 320 }, ], }
查看我如何使用响应式类别的第一个片段!
测试
composer test
变更日志
请参阅变更日志获取更多关于最近更改的信息。
贡献
请参阅贡献指南获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过maosa.sam@gmail.com发送电子邮件,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。