lyhty/prefixed-id

用于在Laravel中给模型键添加前缀的包。

v2.2.0 2023-03-12 11:28 UTC

This package is auto-updated.

Last update: 2024-09-12 15:04:47 UTC


README

Latest Version on Packagist PHP Laravel Total Downloads License

此包将使模型能够在您的系统中拥有带前缀的ID,同时数据库值仍然是常规的ID。

配置

运行以下命令以发布配置文件

php artisan vendor:publish --provider="Lyhty\PrefixedId\PrefixedIdServiceProvider"

您应该设置想要有带前缀ID的模型,您还应将HasPrefixedId特质应用于模型。

示例

带前缀ID的模型将按以下方式工作

use App\Models\Human;

$human = Human::pidFindOrFail("H-1");
$human->pid; // Prints "H-1"
$human->id; // Prints 1

路由绑定

该包自动将配置文件中设置的模型绑定到使用前缀的路由。

模型特定绑定

设置带前缀ID的模型将按以下方式表现: project.test/humans/H-1

web.php

use Illuminate\Support\Facades\Route;

Route::get('humans/{human}', [HumanController::class, 'show']);

您可以在配置中应用可选的前缀到绑定。例如,使用 humans/{pid_human},其中 pid_ 是应用的前缀。这将保持Laravel默认绑定到模型的键而不加前缀。

HumanController.php

public function show(Request $request, Human $human)
{
    // 
}

如您所见,设置模型绑定与不带前缀ID的情况相同。

通用模型绑定

该包还提供更通用的路由。以下是一个示例

web.php

use Illuminate\Support\Facades\Route;

Route::get('resources/{prefixedModel}', [ResourceController::class, 'show']);

您可以在配置中更改路由绑定名称。

ResourceController.php

public function show(Request $request, Model $model)
{
    //
}

使用这种路由设置,project.test/resources/H-1project.test/resources/D-1 都将有效,并分别返回Human模型实例和Dog模型实例。

这样,您可以为返回任何类型的模型设置一个路由,只要它在配置中设置。

带前缀ID辅助类

您可以使用PrefixedId类以下方式查找实例

use Lyhty\PrefixedId\Facades\PrefixedId;

$human = PrefixedId::findModel('H-1');
$dog = PrefixedId::findModel('D-1');

find方法将分别返回App\Models\HumanApp\Models\Dog的实例。