san-kumar/laravel-crud

Laravel CRUD生成器:使用crud:generate命令为任何数据库表生成CRUD。

v1.01 2023-01-03 22:43 UTC

This package is auto-updated.

Last update: 2024-09-29 23:13:54 UTC


README

laravel-crud-generator

简介

Software License Build Status Coverage Status Latest Version on Packagist Total Downloads

请在此处查看完整的文档

此包为您的Laravel项目中的Artisan添加了crud:generate命令。使用此命令,您可以立即为数据库表生成CRUD(创建、读取、更新、删除)!

生成的CRUD包括控制器、模型、策略、路由、验证和4个视图文件(索引、创建、编辑、显示)。它还支持表之间的关系,因此您可以生成嵌套CRUD,例如:在博客文章内生成评论的CRUD。

输出完全可自定义,并支持Bootstrap 5Tailwind CSS

演示视频

Laravel crud generator package

屏幕截图

索引页面

Laravel-crud可以生成嵌套CRUD。例如,您可以通过简单地运行以下命令来生成客户 > 票据 > 回复的CRUD:

$ php artisan crud:generate customers.tickets.replies

表格布局

Table index
(自动生成的具有响应式表格布局的索引页面)

生成的视图完全可自定义且基于模板。例如,您可以通过使用不同的模板(如表格、卡片或聊天)来更改索引页面的外观(包含在包中)。

卡片布局

$ php artisan crud:generate customers.tickets.replies -i cards

Card layout
(卡片布局)

聊天布局

$ php artisan crud:generate customers.tickets.replies -i chat

Chat layout
(聊天布局)

创建/编辑表单

Laravel CRUD生成器可以自动生成创建和编辑记录的表单。它还可以生成表单的验证规则。

Example of generated fields
(生成的字段示例)

注意!

该包仍在alpha阶段

您应仅在新项目中使用它。如果您在现有项目中使用它,请在运行命令之前确保备份(或提交)任何项目更改。

CRUD生成器的目标是节省您的时间,通过为任何数据库表即时生成常见的样板CRUD代码。

但此代码旨在直接使用。您应始终根据您的需求自定义生成的代码,并在部署到生产环境之前手动审查生成的文件。

安装

使用Composer安装

通过composer

$ composer require san-kumar/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
  • 视图
    • 资源视图/[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

# 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

如果您为具有父表中user_id字段(即authors.posts.comments中的authors表具有user_id字段)的表生成CRUD,则生成的CRUD将自动为Authors模型生成策略文件并将其添加到您的资源控制器中适当的位置。

这样将仅允许authors表的所有者访问postscomments

创建和编辑记录

Laravel CRUD生成器可以自动生成创建和编辑记录的表单。它还可以生成表单的验证规则。

表单字段

表单字段是基于数据库表列生成的。以下列类型受到支持:

Example of generated fields
(生成的字段示例)

  • 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生成器会自动处理带有软删除的表,并为您生成恢复或清除已删除记录的相应代码。

Handling soft deletes
(处理软删除)

要显示列表视图中的已删除记录,只需将?trashed=1附加到URL(此链接默认情况下不会添加到导航菜单中,因此您需要手动添加)。

内置搜索

默认情况下,已添加一个非常简单的搜索到列表视图。它搜索表的第一文本列并过滤结果。

此生成的搜索代码只是一个占位符,您应根据自己的需要对其进行自定义。

Inbuilt search
(内置搜索)

要修改搜索算法,只需编辑该路由的资源控制器的index方法。

自定义

使用自己的模板

Laravel CRUD生成器的核心是其模板文件,用于生成CRUD文件。

本包包含的模板文件存储在./vendor/san-kumar/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

这将移除为该表生成的所有文件。

备份

如果您想保留生成的文件,您可以使用 --backup 选项将文件移动到 Zip 存档中。

$ php artisan crud:remove customers.tickets.replies --backup=backup.zip

这将同样从磁盘上移除文件,但还会创建所有移除文件的 Zip 存档。

许可证

本软件使用 MIT 许可证进行许可。这意味着您可以自由地对其做任何事情(包括用于商业目的),只要您在软件/源代码的任何副本中包含原始版权和许可通知。

路线图

  • 添加对 Livewire 的支持
  • 添加对 Laravel Jetstream 的支持

关于

发现任何错误吗?问题跟踪器 上报告它们。

想贡献吗? 在 GitHub 上分叉项目并发送拉取请求。

喜欢这个项目吗? 在 GitHub 上给它加星。