webbtj / crud

自动为任何模型添加 CRUD 路由和方法。

v0.1.1 2019-10-29 13:39 UTC

This package is auto-updated.

Last update: 2024-09-29 05:09:32 UTC


README

Laravel Crud 是一个包,用于自动为任何模型快速添加 CRUD(创建、读取、更新、删除)视图、Web 控制器和 API 控制器。

原型设计

Laravel Crud 允许您快速创建执行完整 CRUD 操作集(创建、读取、更新、删除)所需的所有视图和控制器,包括仅通过配置文件即可创建的索引。Laravel Crud 还会自动为您创建并注册路由,使您只需在数组中一行即可获得模型的数据和 API 端点。

Laravel Crud 的目的是快速原型设计。您所需要的只是模型及其对应的数据库表,以完成完整的 CRUD 操作集。属性及其类型将从数据库中读取,并在 Web UI 中渲染相应的 UI 控件。

安装

通过 composer 安装。

composer require webbtj/crud

用法

安装完成后,您需要发布一个配置文件进行编辑。

php artisan vendor:publish

当提示时,选择 crud-config。这将创建 config/crud.php,您可以在其中定义要为 crud 功能生成的模型。

配置

您可以在 config/crud.php 配置文件中列出任何要为 crud 功能添加的模型。此文件返回一个数组,数组中的每个元素可以是命名模型的字符串,也可以是包含附加配置选项的数组,例如哪些字段是只读的、排除在特定视图之外的,甚至验证。在指定模型名称时,您可以包含模型的完整命名空间(例如 App\Employee)或仅包含类名本身(例如 Employee)。模型名称也是不区分大小写的。

示例配置文件

return [
    'models' => [
        // Add your model class names here (full namespace)
        // Exmaple: "App\\Employee"

        "App\\SmallChild", // a string that will create all routing and views
                           // for the model with all defaults.

        [
            'model' => "App\\FastCar", // specify the model with extra configs
            'index' => [
                'exclude' => ['created_at'], // don't show this property in the
                                             // index view
            ],
            'store' => [
                'validation' => [ // run this validation on the "store" method
                    'year' => 'required'
                ],
            ],
        ],

        [
            'model' => "App\\Employee",
            'show' => [
                'exclude' => ['sample_text', 'sample_string'],
            ],
            'edit' => [
                'exclude' => ['sample_longText'],
                'readonly' => ['sample_char'], // in the edit interface, show
                                               // this property but make it
                                               // read only
            ],
            'create' => [
                'exclude' => ['sample_text'],
                'include' => ['updated_at'], // include this property in the
                                             // create interface (it's normally
                                             // not included)
                'readonly' => ['sample_integer'],
            ],
            'index' => [
                'include' => [
                    'id', 'first_name', 'last_name', 'email', 'sample_json',
                    'sample_jsonb', 'sample_enum', 'sample_set', 'enabled'
                ],
            ],
            'update' => [
                'validation' => [
                    'first_name' => 'required',
                    'last_name' => 'required',
                ],
            ]
        ]
    ]
];

您可以为四个标准视图(show、edit、create、index)中的每个指定属性的 includeexcludereadonly 数组。您还可以为两个标准方法(store 和 update)中的每个指定 includeexcludevalidation 数组。如果您以数组格式指定附加选项,则必须包括 model 定义。

默认值

虽然您可以完全控制哪些字段可以显示和编辑,但此包在您未提供具体信息时将回退到默认值。默认情况下...

  • 不对任何属性应用验证
  • idcreated_atupdated_at 不能通过请求进行更新
  • 每个视图将显示所有属性

在所有视图(除 index 外),您将 exclude 不想显示的字段。如果您想自定义 index 视图,则需要 include 每个属性。

生产环境

但是,读取每个与模型交互的架构、从配置中读取和解析所有这些包含、排除、只读和验证规则是非常昂贵的操作,并且并不适合生产应用程序。这就是为什么有一个 artisan 命令将视图和控制器提交到 您的 代码库,以提高性能和进一步的开发控制。

php artisan crud:publish

crud:publish artisan 命令会在你的 views 目录中为模型创建一个目录,包含 indexshowcreateedit 视图。它还会在你的 Http/Controllers 目录中创建一个 Web 控制器,以及在 Http/Controllers/Api 目录中创建一个 API 控制器。最后,它将提供将路由添加到你的 web.phpapi.php 路由文件中的推荐代码,并建议你现在从 crud.php 配置文件中删除发布模型。

当然,你可以通过选项来自定义和限制这个发布。使用 --model= 来指定你希望发布的模型。省略此选项将发布所有模型。此选项可以通过多次指定来允许多个值(例如:`php artisan crud:publish --model=Employee --model=Car`)。

你还可以通过指定 --type= 来指定你想要发布的元素。像 --model= 一样,这可以重复以指定要发布的多个类型。有效的类型如下:

  • controller - 发布 Web 控制器
  • api.controller - 发布 API 控制器
  • views - 发布所有视图
  • view.index - 只发布 index 视图
  • view.show - 只发布 show 视图
  • view.create - 只发布 create 视图
  • view.edit - 只发布 edit 视图

关于这些选项的一些注意事项。它们不区分大小写;所有标点符号都被移除(因此 api.controllerapi-controllerapicontroller 都有效);单数与复数无关(仅限英语);特定视图的单词顺序无关(view.indexindex.view)。

路线图

  • 单元测试
  • beta 版本/发布到 Packagist。

贡献

欢迎贡献 GitHub。在提交 PR 之前,请先打开问题,并在你的提交信息/PR 描述中标记问题。另外,尽可能遵循 PSR-2。