zealous-creations/tranquil-model-controller

0.10.35 2024-08-09 18:25 UTC

README

此包包含基础 Laravel Eloquent 模型和控制器,包含您执行 CRUD 操作所需的所有功能。使 Laravel 开发更具“宁静”体验。

需要 Laravel 10

安装

使用 composer 安装它

composer require zealous-creations/tranquil-model-controller

注意:如果您已安装 inertiajs/inertia-laravel 版本低于 v0.6doctrine/dbal 版本低于 v3.0,则可能需要在要求 zealous-creations/tranquil-model-controller 之前将其删除

composer remove inertiajs/inertia-laravel
composer remove doctrine/dbal
composer require zealous-creations/tranquil-model-controller

发布迁移

此包中有 2 个迁移用于创建 users 表和 attachments

如果您在运行这些迁移之前想修改这些迁移,请运行以下 artisan 命令

php artisan vendor:publish --tag=tranquil-model-migrations

用法

宁静控制器

宁静控制器负责处理标准 Laravel 控制器的所有方法:indexcreateshoweditstoredestroy

对于您的任何模型控制器,您只需扩展 TranquilController

class CarController extends TranquilController {}

然后,您只需添加模型的路由资源。

// routes/web.php

Route::resource('cars', CarController::class);

现在,所有资源路由的端点都将自动工作,无需在控制器中添加任何方法。

GET|HEAD  cars .................. cars.index › CarController@index
POST      cars .................. cars.store › CarController@store
GET|HEAD  cars/create ......... cars.create › CarController@create
GET|HEAD  cars/{car} .............. cars.show › CarController@show
PUT|PATCH cars/{car} .......... cars.update › CarController@update
DELETE    cars/{car} ........ cars.destroy › CarController@destroy
GET|HEAD  cars/{car}/edit ......... cars.edit › CarController@edit

显示端点示例

GET /cars/1

{
  "success": true,
  "message": "",
  "car": {
    "id": 1,
    "make": "Audi",
    "model": "A3",
    "year": 2016
  }
}

更新端点示例

PATCH /cars/1 PAYLOAD {"year": 2024}

这将更新具有 id 为 1cars 记录的 year 列 - 只要 year 包含在 $fillable 模型参数中。

或者,如果您有模型扩展 TranquilModel

class Car extends TranquilModel {
    //...
}

存储端点示例

POST /cars PAYLOAD {"make": "Tesla", "model": "Model S", "year": 2024}

这将创建 cars 表中的一条新记录。如果模型扩展 TranquilModel 或使用 HasValidation 特性,则可以进行自动输入验证。

class Car extends Model {
    use HasValidation;
    //...
}

列表端点

您还可以添加用于获取模型记录列表的 list 路由端点

// routes/web.php

Route::post('cars/list', [CarController::class, 'list'])->name('cars.list');

示例

POST /cars/list PAYLOAD {"where": {"make": "Buick"}}

{
  "success": true,
  "message": "",
  "total": 4,
  "records": [
    {
      "id": 108,
      "make": "Buick",
      "model": "Enclave",
      "year": 2016
    },
    {
      "id": 109,
      "make": "Buick",
      "model": "Encore GX",
      "year": 2016
    },
    {
      "id": 110,
      "make": "Buick",
      "model": "Envision",
      "year": 2016
    },
    {
      "id": 111,
      "make": "Buick",
      "model": "Envista",
      "year": 2016
    }
  ]
}

宁静 Inertia 控制器

您可以通过扩展 TranquilInertiaController 来返回所有标准控制器方法对应的 Inertia 响应

class CarController extends TranquilInertiaController {}

现在,所有端点都将返回与对应组件路径对应的 Inertia 响应。

/cars .............. resources/js/Pages/Cars/Index
/cars/create ....... resources/js/Pages/Cars/CreateEdit
/cars/{car} ........ resources/js/Pages/Cars/Show
/cars/{car}/edit ... resources/js/Pages/Cars/CreateEdit

用户模型

此包还包含一个 TranquilUser 模型,用于认证用户。

您可以扩展此模型进行修改

class User extends \Tranquil\Models\TranquilUser {
    
    public const roleOptions = [
		[
			'handle'      => 'super',
			'name'        => 'Super User',
			'description' => 'Has full access',
		],
		[
			'handle'      => 'leader',
			'name'        => 'Leader',
			'description' => 'Has administrator access',
		],
		[
			'handle'      => 'staff',
			'name'        => 'Staff',
			'description' => 'Has basic access',
		],
	];
	
	//...
}