alexander-fuchs / hashidable
Laravel 模型和路由的自动 Hashids
1.0.0
2023-07-19 12:38 UTC
Requires
- php: >=8.0
- hashids/hashids: ^5.0
Requires (Dev)
- orchestra/database: ^6.0
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-09-19 15:06:55 UTC
README
Hashidable 使用 hashids 对 Laravel 路由 ID 进行混淆。
安装
注意:此包是为与 Laravel 10 以上版本一起使用而构建的。它可能在旧版本中也能工作,但尚未经过测试。
composer require altinum/hashidable
设置
导入 Hashidable
特性并将其添加到您的模型中。
use Altinum\Hashidable\Hashidable; Class User extends Model { use Hashidable; }
使用
$user = User::find(1); $user->id; // 1 $user->hashid; // 3RwQaeoOR1E7qjYy User::find(1); User::findByHashId('3RwQaeoOR1E7qjYy'); User::findByHashidOrFail('3RwQaeoOR1E7qjYy');
路由模型绑定
假设我们有一个如下定义的路由资源
Route::apiResource('users', UserController::class);
此包不会影响路由模型绑定,唯一的区别是,它使用 hashid 代替在生成的路由中放置 id。
因此,route('users.show', $user)
返回 /users/3RwQaeoOR1E7qjYy
;
当您定义控制器,在参数中自动解析模型时,它将像往常一样工作。
public function show(Request $request, User $user) { return $user; // Works just fine }
配置
首先,使用以下命令发布配置文件
php artisan vendor:publish --tag=hashidable.config
可用的配置选项包括
return [ /** * Length of the generated hashid. */ 'length' => 16, /** * Character set used to generate the hashids. */ 'charset' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', /** * Prefix attached to the generated hash. */ 'prefix' => '', /** * Suffix attached to the generated hash. */ 'suffix' => '', /** * If a prefix of suffix is defined, we use this as a separator * between the prefix/suffix. */ 'separator' => '-', ];
按模型配置
您还可以在每模型的基础上扩展全局配置。为此,您的模型应实现 Altinum\Hashidable\HashidableConfigInterface
并在模型上定义 hashidableConfig()
方法。
此方法返回一个数组或类似全局配置的选项子集。
public function hashidableConfig() { return ['prefix' => 'app']; }
常见问题解答
生成的哈希存储在哪里?
Hashidable 不会接触数据库来存储任何类型的元数据。它所做的是使用内部编码器/解码器动态计算哈希。