thiagoprz/crud-tools

易于使用的Laravel CRUD包,内置控制器、模型和日志系统

1.0.2 2023-10-24 00:59 UTC

README

易于使用的Laravel CRUD包,内置控制器、模型和日志系统。

Documentation Status Dev Master

目录

安装

使用composer安装: composer install thiagoprz/crud-tools

如果您没有启用包自动发现,请将CrudToolsServiceProvider添加到您的 config/app.php

... 
'providers' => [
    ...
    \Thiagoprz\CrudTools\CrudToolsServiceProvider::class,
],
...

发布Crud Tools服务提供者以允许存根自定义

php artisan vendor:publish --provider="Thiagoprz\CrudTools\CrudToolsServiceProvider"

用法

CRUD模型

对于模型,您只需添加ModelCrud特质,然后创建一个静态属性来声明模型的有效性(基于创建、更新和/或删除场景),默认顺序、过滤规则、上传文件规则、定义资源和with / 可计数关系。

  • 有效性
<?php
...
use Thiagoprz\CrudTools\Models\ModelCrud;
use Thiagoprz\CrudTools\Interfaces\ModelCrudInterface;
class User extends Authenticatable implements ModelCrudInterface
{
    use ModelCrud;
    
    /**
     * Model validations
     *
     * @var array
     */
    static $validations = [
        'create' => [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ],
        'update' => [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ],
    ];
    ...
}
  • 可搜索字段

您可以创建一个 $searchable 属性,它将包含允许在静态方法 search() 上进行搜索的字段 - 非常适用于ControllerCrud。

<?php
...
use Thiagoprz\CrudTools\Models\ModelCrud;
class User extends Authenticatable
{
    use ModelCrud;
    /**
     * Fields that can be searched by (static)method search()
     *
     * @var array
     */
    static $searchable = [
        'id' => 'int',
        'name' => 'string',
        'created_at' => 'datetime',
    ];
    ...
}
  • 可搜索的字段范围

可用类型:int、string、date、datetime和decimal。

您可以使用输入过滤器在日期、datetime和decimal字段上使用“_from”和“_to”后缀

<!-- Filtering created_at usig field "from" ( where created_at >= $created_at_from ) -->
<label>Period from: </label>
<input type="date" name="created_at_from">

<!-- Filtering created_at usig field "to" ( where created_at <= $created_at_to ) -->
<label>To:</label>
<input type="date" name="created_at_to">
  • 自定义可搜索字段方法

除了使用基于字段类型的标准搜索外,您还可以添加自己的自定义方法来自定义特定字段的搜索。创建一个名为 "searchField" 的方法,其中 Field 是字段的名称,首字母大写。

示例

<?php
...
use Thiagoprz\CrudTools\Models\ModelCrud;
class Books extends Model
{
    ...
    
    /**
     * Searching only by the start of the title of the book with LIKE
     */
    public static function searchTitle($query, $title)
    {
        $query->where('title', 'LIKE', "$title%");    
    }

}


  • 可排序字段

您可以在索引操作上定义默认排序的字段。您还可以传递一个由搜索方法使用的 "order" 输入,以覆盖由此变量定义的默认顺序。

<?php
...
use Thiagoprz\CrudTools\Models\ModelCrud;
use Thiagoprz\CrudTools\Interfaces\ModelCrudInterface;
class Books extends Model implements ModelCrudInterface
{
    use ModelCrud;
    /**
     * Default order
     *
     * @var array
     */
    static $search_order = [
        'title' => 'ASC',
        'updated_at' => 'DESC',
        'created_at' => 'DESC',
    ];
    ...
}
  • 上传字段

您可以创建一个fileUploads方法来定义哪些上传字段以及文件将存储的位置

<?php
...
use Thiagoprz\CrudTools\Models\ModelCrud;
use Thiagoprz\CrudTools\Interfaces\ModelCrudInterface;
class User extends Authenticatable implements ModelCrudInterface
{
    use ModelCrud;
    ...
    /**
     * @param Campaign $model
     * @return array
     */
    public static function fileUploads(Campaign $model)
    {
        return [
            'FIELD_NAME' => [
                'path' => 'FOLDER', // Mandatory
                'name' => 'FILE_NAME', // (OPTIONAL)if not provided will be the file original name 
            ],
        ];
    }
    ...
}

CRUD控制器

通过仅创建一个使用ControllerCrud特质的标准控制器类,就可以实现CRUD控制器。

下一步是在 resources/views 内部创建一个文件夹,用于所需的命名空间,或者在根文件夹中(如果控制器不使用特定命名空间,例如示例中的admin)。

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Thiagoprz\CrudTools\Http\Controllers\ControllerCrud;
use Thiagoprz\CrudTools\Interfaces\ControllerCrudInterface;

class UserController extends Controller implements ControllerCrudInterface
{
    use ValidatesRequests;
    use ControllerCrud;
    public $modelClass = User::class;
}

Controller CRUD基于上述示例使用的视图目录结构

文件夹

views/admin/user

文件

create.blade.php

edit.blade.php

可用变量:$model(正在更新的模型)

form.blade.php

可用变量:$model(正在更新的模型 - 仅在编辑操作中)

index.blade.php

可用变量:$items(包含模型过滤集合的分页对象)

show.blade.php

可用变量:$model(正在显示的模型)

CRUD生成器

模型生成器

要轻松创建具有所有Crud Tools的模型,请使用

php artisan make:crud-model NAMESPACE/Model   

NAMESPACE:模型的命名空间 Model:模型的名称

  • 可用选项
    • --fillable:以逗号分隔的填充属性字段
    • --searchable:以逗号分隔的可搜索属性字段(基于search()方法)
    • --primaryKey:字段或以逗号分隔的字段,它们是表的主键
    • --softDeletes:如果传递,则在该类上启用SoftDeletes特质
    • --uploads:如果传递,则在该类上添加fileUploads()方法
    • --logable:在模型上添加Logable特质

控制器生成器

您可以使用以下命令创建一个与模型配合工作的标准控制器:

php artisan make:crud-controller NAMESPACE1/NAMEController NAMESPACE2/Model

NAMESPACE1: 控制器的命名空间

NAMEController: 控制器的名称

NAMESPACE2: 模型的命名空间

Model: 模型的名称

启用日志

要为您的模型启用自动日志记录,您需要发布Spatie Activity Logger迁移

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"

运行迁移

php artisan migrate

有关更多信息,您可以阅读Spatie Activity Log 文档

自定义路由和资源路径

如果您需要为资源目录实现除默认的resources/{namespace/}modelname/以外的不同结构,您可以在控制器中实现getViewPath方法并手动定义它

    /**
     * @param $forRedirect
     * @return string
     */
    public function getViewPath($forRedirect = false): string
    {
        return $forRedirect ? 'custom/url' : 'custom.path';
    }

此方法返回路由和视图的路径,因此您可以通过仅使用$forRedirect来分别自定义资源的URL和路径,其中true用于路由,false用于资源目录。

贡献

请查阅贡献文件,以更好地了解如何为包做出贡献。

支持

问题

请随时指出此包中的任何问题,这将非常有帮助。我将尽快解决。

由Jetbrains支持

该项目在Jetbrains的支持下开发,Jetbrains通过其支持开源软件的项目来支持此项目。

Test Image 1

给我买杯咖啡

ko-fi buy-coffee