lyhty / prefixed-id
用于在Laravel中给模型键添加前缀的包。
v2.2.0
2023-03-12 11:28 UTC
Requires
- php: >=7.4
- illuminate/database: ^8.0 || ^9.0 || ^10.0
- illuminate/support: ^8.0 || ^9.0 || ^10.0
Requires (Dev)
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8.5
README
此包将使模型能够在您的系统中拥有带前缀的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-1
和 project.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\Human
和 App\Models\Dog
的实例。