atcliff / laravel-crud-forms
为 Laravel 模型创建 CRUD 表单。
Requires
- php: ^7.2
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
This package is not auto-updated.
Last update: 2024-09-18 09:29:18 UTC
README
这是一个 Laravel >=5.5 的包,可以帮助轻松创建 eloquent 模型的 CRUD(创建、读取、更新、删除)表单(以及索引页面)。它的目标是作为一个不干扰应用其他部分的快速工具。
该包提供
- 一个可以在资源控制器中使用的特性
- 一系列用于显示表单的视图
视图使用 Bootstrap(v3)构建,但样式可以轻松覆盖。
安装
Composer
从命令行运行
composer require achillesp/laravel-crud-forms
配置
此包使用一个配置文件,您可以通过将其发布到应用的配置目录来覆盖它。
php artisan vendor:publish --provider=Achillesp\CrudForms\CrudFormsServiceProvider --tag=config
用法
要使用此包,您需要在模型的控制器中使用特性 Achillesp\CrudForms\CrudForms
并定义您的路由。该特性提供 Resource Controller 所需的所有方法,以及一个恢复方法,以防软删除的模型。
路由
例如,如果您有一个 Post
模型,您将定义以下路由
Route::resource('/posts', 'PostController');
控制器
然后在您的 PostController
中,您需要使用特性并定义一个构造函数,在该构造函数中您给出模型的必要细节。
use App\Post; use Achillesp\CrudForms\CrudForms; class PostController extends Controller { use CrudForms; public function __construct(Post $post) { $this->model = $post; } }
在控制器的构造函数中,您可以定义由控制器处理的属性。可以定义的可用属性如下。
模型
这是模型,应通过依赖注入传递给构造函数。
表单字段数组
这是一个包含您需要在表单中使用的所有字段的数组。每个字段都声明为一个具有以下属性的数组:
name
: 这是模型属性名称,如数据库中所示。label
: 这是表单中的字段标签。type
: 将使用的表单输入字段类型。接受的类型有- text
- textarea
- url
- password
- date
- select
- select_multiple
- checkbox
- checkbox_multiple
- radio
relationship
: 在选择、select_multiple、radio 或 checkbox_multiple 按钮的情况下需要此字段。您可以在此处声明模型中定义的关系名称。在下面的示例中,Post
模型有一个belongsTo
关系到category
和一个belongsToMany
关系到tags
。对于belongsTo
关系,您可以使用选择或单选按钮(一组单选按钮)输入。对于belongsToMany
关系,您可以使用选择_multiple 或 checkbox_multiple 输入。relFieldName
: 这是可选的。仅在我们有关系的情况下使用,用于设置显示的关联模型的属性名称(例如,在选择的选项中)。如果未定义,则使用默认的name
属性。
$this->formFields = [ ['name' => 'title', 'label' => 'Title', 'type' => 'text'], ['name' => 'slug', 'label' => 'Slug', 'type' => 'text'], ['name' => 'body', 'label' => 'Enter your content here', 'type' => 'textarea'], ['name' => 'publish_on', 'label' => 'Publish Date', 'type' => 'date'], ['name' => 'published', 'label' => 'Published', 'type' => 'checkbox'], ['name' => 'category_id', 'label' => 'Category', 'type' => 'select', 'relationship' => 'category'], ['name' => 'tags', 'label' => 'Tags', 'type' => 'select_multiple', 'relationship' => 'tags'], ];
indexFields
数组
这些是在索引页面中显示的模型属性。
$this->indexFields = ['title', 'category_id', 'published'];
如果没有定义,则显示 formFields
中的第一个字段。
formTitle
(可选)
您可以选择定义模型名称,使其在视图中以我们希望的方式显示。如果未定义,则使用模型名称。
bladeLayout
(可选)
此用于定义将被 CRUD 表单和索引页面视图扩展的刀片布局文件。
显示已删除模型(withTrashed
)的选项
将此设置为 true,也将显示已删除的模型并提供恢复它们的选项。
$this->withTrashed = true;
为了能够恢复模型,您需要定义一个额外的路由
Route::put('/posts/{post}/restore', ['as' => 'posts.restore', 'uses' => 'PostController@restore']);
validationRules
数组(可选)
这些是我们想要在保存模型之前验证数据时使用的规则。
$this->validationRules = [ 'title' => 'required|max:255', 'slug' => 'required|max:100', 'body' => 'required', 'publish_on' => 'date', 'published' => 'boolean', 'category_id' => 'required|int', ];
validationMessages
数组(可选)
使用此定义验证错误的自定义消息。例如
$this->validationMessages = [ 'body.required' => "You need to fill in the post content." ];
validationAttributes
数组(可选)
使用此更改属性名称在验证错误消息中应出现的方式。
$this->validationAttributes = [ 'title' => 'Post title' ];
视图
视图是用 bootstrap v.3 构建的,并且还包含 CSS 类以支持一些常见的 JavaScript 库。
- 在选择输入中使用 select2 类
- 在日期输入中使用 datepicker 类
- 在索引视图表中使用 data-table 类
也可以发布视图,这样您就可以按需更改它们。要发布它们,请使用以下 artisan 命令
php artisan vendor:publish --provider=Achillesp\CrudForms\CrudFormsServiceProvider --tag=views
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件