mostafa-mohamed / laravel-crud

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

1.0.0 2023-01-22 07:44 UTC

This package is not auto-updated.

Last update: 2024-09-30 14:31:02 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 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 模型生成策略文件,并将其添加到您的资源控制器中适当的位置。

这样,对 postscomments 的访问将仅限于 authors 表的所有者。

创建和编辑记录

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/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 上给它加星。