mostafa-mohamed / laravel-crud
Laravel CRUD 生成器:使用 crud:generate 命令为任何数据库表生成 CRUD。
Requires
- php: ^8.0
- doctrine/dbal: ^3.5
Requires (Dev)
- laravel/framework: ^8.0 || ^9.0
- mockery/mockery: ^1.4
- orchestra/testbench: *
- phpunit/phpunit: ^9.0 || ^10.0
This package is not auto-updated.
Last update: 2024-09-30 14:31:02 UTC
README
介绍
请在此处查看完整的文档:完整文档。
此包为您的 Laravel 项目中的 Artisan 添加了 crud:generate 命令。使用此命令,您可以立即为您的数据库表生成 CRUD(创建、读取、更新、删除)!
生成的 CRUD 包括控制器、模型、策略、路由、验证,以及 4 个视图文件(索引、创建、编辑、显示)。它还支持表之间的关系,因此您可以生成嵌套 CRUD,例如:在博客文章中生成评论的 CRUD。
输出完全可自定义,并支持 Bootstrap 5 和 Tailwind CSS。
演示视频
截图
索引页
Laravel-crud 可以生成嵌套 CRUD。例如,您可以通过简单运行以下命令来生成客户 > 票据 > 回复的 CRUD:
$ php artisan crud:generate customers.tickets.replies
表格布局
生成的视图完全可自定义,并基于模板。例如,您可以通过使用不同的模板(如表格、卡片或聊天,这些模板包含在包中)来更改索引页的外观。
卡片布局
$ php artisan crud:generate customers.tickets.replies -i cards
聊天布局
$ php artisan crud:generate customers.tickets.replies -i chat
创建/编辑表单
Laravel CRUD 生成器可以自动生成创建和编辑记录的表单。它还可以生成表单的验证规则。
注意!
该包仍处于 alpha 阶段
您应仅在新项目中使用它。如果您在使用现有项目使用它,请在运行命令之前确保备份(或提交)任何项目更改。
CRUD 生成器的目标是节省您的时间,通过为任何数据库表立即生成常见的 CRUD 代码模板。
但此代码 不 旨在直接使用。您应始终根据您的需求自定义生成的代码,并在部署到生产之前手动审查生成的文件。
安装
使用 Composer 安装
通过 composer
$ composer require MOstafaMOhamedX/laravel-crud --dev
生成文件
重要!
在开始 CRUD 生成器之前,请确保创建数据库表并运行迁移。
安装包后,您应该在 Artisan 命令列表中看到一个新命令 crud:generate
。
要生成控制器、模型、策略、路由等,请使用以下命令
# Create CRUD for authors table $ php artisan crud:generate authors # Create CRUD for the authors > posts table $ php artisan crud:generate authors.posts # Create CRUD for the authors > posts > comments table $ php artisan crud:generate authors.posts.comments
包括生成的路由
默认情况下,生成的路由放置在 ./routes/crud/
目录中。要包括生成的路由,请打开您的 routes/web.php
文件,并在文件末尾添加以下行
/* inside routes/web.php */ \San\Crud\Crud::routes();
这将 glob
所有的生成路由文件并将它们包含在 routes/web.php
文件中。
或者,您可以将 ./routes/crud/
目录中的生成路由复制粘贴到您的 routes/web.php
文件中。这样,您可以根据需要更改生成的路由代码。
生成文件的存放位置
crud:generate
命令将生成以下文件并将它们放置在适当的目录中
- 资源控制器
app/Http/Controllers/[Name].php
- 模型
app/Model/[Name].php
- 策略
app/Policies/[Name]Policy.php
- 路由
routes/crud/[name].php
- 视图
resources/views/[name]/(index|edit|create|show).blade.php
默认情况下,生成的代码不会覆盖任何现有文件。如果想要覆盖现有文件,可以使用--force
选项。
选项
CSS框架:Bootstrap 5和TailwindCSS。
您可以选择Bootstrap 5和Tailwind CSS,或者使用您自己的CSS框架。默认情况下,如果不指定,则使用Bootstrap 5。
# Create CRUD for authors table using Tailwind CSS $ php artisan crud:generate authors --css=tailwind # Shortcut for Tailwind CSS $ php artisan crud:generate authors -t
# Create CRUD for authors table using layout 'layouts/admin.blade.php'
$ php artisan crud:generate authors --layout=admin
$ php artisan crud:generate authors --section=mysection
前缀
您可以通过传递--prefix
选项为生成的CRUD添加路由前缀。
# Create CRUD for authors table using Tailwind CSS
$ php artisan crud:generate authors --prefix=admin
这会将路由从/authors
更改为/admin/authors
在所有生成的文件中。
索引模板
您可以选择3个现成的索引模板:表格、卡片和聊天。默认情况下,使用表格模板。
# Create CRUD for authors table using cards template $ php artisan crud:generate authors -i cards # Create CRUD for authors table using chat template $ php artisan crud:generate authors -i chat
请参见此处索引页面中的截图。
单个创建和编辑表单
在某些情况下,您可能希望为创建和编辑资源使用单个表单。您可以通过传递--merge-forms
选项来实现。
# Create CRUD for authors table using a single form
$ php artisan crud:generate authors --merge-forms
这将生成一个名为create-edit.blade.php
的单个view
文件,并相应地更新控制器代码,使其可用于创建和编辑资源。
布局和部分名称
默认情况下,生成的视图使用layouts/app.blade.php
作为布局,使用content
作为部分名称。您可以通过传递自己的布局和部分名称来更改这些默认名称。
关联表和嵌套
除了为单个表生成简单的CRUD之外,您还可以为相互关联的表生成CRUD。
示例 #1
例如,假设我们有以下表
- 作者
- 帖子
- 评论
- 帖子
要为这些表生成CRUD,您可以使用点表示法指定父表,如下所示:authors.posts.comments
。
```bash # Create CRUD for authors table $ php artisan crud:generate authors # Create CRUD for posts table $ php artisan crud:generate authors.posts # Create CRUD for comments table $ php artisan crud:generate authors.posts.comments
这将生成authors
表的CRUD文件,因此您可以使用/authors
路由查看、创建、编辑和删除作者。
然后对于每位作者,您可以使用/authors/{author}/posts
路由查看、创建、编辑和删除帖子。
并且对于每篇帖子,您可以使用/authors/{author}/posts/{post}/comments
路由查看、创建、编辑和删除评论。
示例 #2
另一方面,如果您想为posts
表生成CRUD,而不将其嵌套在authors
路由下,您可以这样做
# Create CRUD for posts table $ php artisan crud:generate posts # Create CRUD for comments table $ php artisan crud:generate posts.comments
因此现在您可以使用/posts
路由查看、创建、编辑和删除所有帖子,而不管作者是谁,然后对于每篇帖子,您可以使用/posts/{post}/comments
路由查看、创建、编辑和删除评论。
认证
Laravel CRUD生成器使用默认的Laravel认证包laravel/ui来处理用户认证。CRUD生成器将自动将认证添加到路由(使用auth
中间件)并为模型生成策略类。
表中的user_id
字段
如果您为具有user_id
字段的任何表生成CRUD,则生成的CRUD将自动为模型生成策略文件,并将authorizeResource
方法添加到资源控制器中。
父表中的user_id
如果您为具有父表(例如 authors.posts.comments
中的 authors
表)中的 user_id
字段的表生成 CRUD,则生成的 CRUD 将自动为 Authors
模型生成策略文件,并将其添加到您的资源控制器中适当的位置。
这样,对 posts
和 comments
的访问将仅限于 authors
表的所有者。
创建和编辑记录
Laravel CRUD 生成器可以自动生成创建和编辑记录的表单。它还可以生成表单的验证规则。
表单字段
表单字段是基于数据库表列生成的。以下列类型受到支持
string
(输入类型文本)text
(文本区域)integer
(输入类型数字)enum
(选择框)boolean
(单选按钮)relation
(带填充选项的选择框)- 等等...
它还可以从列名推断字段类型。例如,如果列名是 email
,字段类型将是 email
。
验证规则
默认情况下,所有非空字段都是必需的。具有 unique
索引的列也被验证为在表中是唯一的。
根据列名还添加了一些额外的验证规则。例如,如果列名是 email
,验证规则将是 email
。
关系字段
如果表有任何外键列,生成器将自动为该列添加一个选择字段。选择字段的选项将从相关表自动填充。
例如,如果您的表有一个 country_id
列,并且存在 country
表,则生成器将为国家添加选择字段(如上图所示),并且该选择字段的选项将从 countries
表自动填充(如果国家表有 user_id
列,则选项将按当前用户进行过滤)。
关于关系字段的一则快速提示
您需要手动添加关系字段或创建数据库中的任何外键列。关系是从列名推断的。任何符合 *_id
模式的列名都被认为是关系。
例如,如果列名是 country_id
,则生成器将查找 countries
表,并在该表存在(并且当前用户有权访问该表)时,为该列添加选择字段并从 countries
表填充选项。
软删除
Laravel 提供了一种简单的方法来实现 Eloquent 模型的软删除。软删除允许您记录模型删除的情况,而无需实际从数据库中删除模型。这允许您在需要时稍后恢复该模型。
Laravel CRUD 生成器自动处理具有软删除的表,并为您生成适当的代码来恢复或清除已删除的记录。
要显示列表视图中的已删除记录,只需将 ?trashed=1
添加到 URL(此链接默认不会添加到导航菜单中,因此您需要手动添加)。
内置搜索
默认情况下,列表视图添加了一个非常简单的搜索。它搜索表的第一文本列并过滤结果。
此生成的搜索代码只是一个占位符,您应根据需要对其进行自定义。
要修改搜索算法,只需编辑该路由的资源控制器的 index
方法。
自定义
使用自己的模板
在 Laravel CRUD 生成器的核心中是用于生成 CRUD 文件的模板文件。
本软件包包含的模板文件存储在 ./vendor/MOstafaMOhamedX/laravel-crud/src/template
目录。
它包含所有用于生成控制器、模型、策略、路由等文件的占位符文件。
自定义模板
您可以通过将模板复制到新目录并修改模板文件来自定义模板。
为了简化,此 Laravel CRUD 生成器提供了一个 artisan 命令,可以自动将模板文件复制到新目录。
# Copy the template files into a new directory
$ php artisan crud:template newname
这会将模板文件复制到新目录 ./templates/newname/
。
如果您想指定不同的目录来复制模板文件,可以使用 --directory
或 -d
选项。
# Copy the template files into a new directory
$ php artisan crud:template newname -d etc/templates
这会将模板文件复制到新目录 ./etc/templates/newname/
。
使用自己的模板
要使用您自己的模板,您需要在 config/crud.php
文件中指定模板目录。
// config/crud.php return [ 'template_dir' => 'etc/templates/newname', ];
或者,您可以在生成 CRUD 时使用 --template
或 -t
选项来指定模板目录。
# Generate the CRUD using the new template
$ php artisan crud:generate Post --template etc/templates/newname
自定义模板
您需要修改新目录中的模板文件以自定义生成的文件。
您会在模板文件中发现多个变量,这些变量在文件生成时会替换为实际值。
要查看模板文件中使用的所有变量的完整列表,请查看 GenerateCrud.php 的源代码。
已知问题
Laravel Jetstream
目前 Laravel CRUD 生成器似乎无法与 Laravel Jetstream 一起使用。如果您正在使用 Jetstream,您仍然可以使用此包,但您可能需要手动修改一些生成的代码以修复布局和身份验证问题。
内置搜索
默认情况下,在列表视图中添加了一个非常简单的搜索功能。它会搜索表的第一文本列并过滤结果。但此生成的搜索代码只是一个基本的占位符,您应该根据您自己的需求自定义搜索算法。
有偏见的代码
虽然此包试图尽可能灵活,但仍然生成了一些有偏见的代码。例如,生成的 CRUD 使用 Laravel 的 Policy
类来处理授权。但您可能更喜欢使用像 spatie/laravel-permission
这样的其他东西,这可以做到,但需要您 创建自己的模板。
Alpha 版本
您应仅在新项目中使用它。如果您在使用现有项目使用它,请在运行命令之前确保备份(或提交)任何项目更改。
删除生成的 CRUD 文件
删除文件
Laravel CRUD 生成器允许您使用 artisan crud:remove
命令删除生成的文件。
$ php artisan crud:remove customers.tickets.replies
这将从表中删除由 crud:generate
生成的所有文件。
备份
如果您想保留生成的文件,可以使用 --backup
选项将文件移动到 Zip 存档中。
$ php artisan crud:remove customers.tickets.replies --backup=backup.zip
这将从磁盘上删除文件,但也会创建所有被删除文件的 Zip 存档。
许可证
该软件使用 MIT 许可证进行许可。这意味着您可以随意使用它(包括免费用于商业目的),只要您在任何软件/源代码的副本中包含原始版权和许可证通知。
路线图
- 添加对 Livewire 的支持
- 添加对 Laravel Jetstream 的支持
关于
发现任何错误吗? 在 问题跟踪器 上报告它们。
想要贡献? 在 GitHub 上叉项目并发送拉取请求。
喜欢这个项目吗? 在 GitHub 上给它加星。