thiagoprz / crud-tools
易于使用的Laravel CRUD包,内置控制器、模型和日志系统
Requires
- php: ^7.4 || ^8.0 || ^8.1 || ^8.2
- laravel/framework: 8.*||9.*||10.*
- spatie/laravel-activitylog: ^3.1
Requires (Dev)
- orchestra/testbench: 6
- squizlabs/php_codesniffer: 4.0.x-dev
- dev-master
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.65
- 0.0.64
- 0.0.63
- 0.0.62
- 0.0.61
- 0.0.60
- 0.0.59
- 0.0.58
- 0.0.57
- 0.0.56
- 0.0.55
- 0.0.54
- 0.0.53
- 0.0.52
- 0.0.51
- 0.0.50
- 0.0.49
- 0.0.48
- 0.0.47
- 0.0.46
- 0.0.45
- 0.0.44
- 0.0.43
- 0.0.42
- 0.0.41
- 0.0.40
- 0.0.39
- 0.0.38
- 0.0.37
- 0.0.36
- 0.0.35
- 0.0.34
- 0.0.33
- 0.0.32
- 0.0.31
- 0.0.30
- 0.0.29
- 0.0.28
- 0.0.27
- 0.0.26
- 0.0.25
- 0.0.24
- 0.0.23
- 0.0.22
- 0.0.21
- 0.0.20
- 0.0.19
- 0.0.18
- 0.0.17
- 0.0.16
- 0.0.15
- 0.0.14
- 0.0.13
- 0.0.12
- 0.0.11
- 0.0.10
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.1
- dev-dev
This package is auto-updated.
Last update: 2024-09-24 03:08:10 UTC
README
易于使用的Laravel CRUD包,内置控制器、模型和日志系统。
目录
安装
使用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通过其支持开源软件的项目来支持此项目。