kayandra / hashidable

Laravel 模型和路由的自动 Hashids

v1.6.0 2021-01-03 12:30 UTC

This package is auto-updated.

Last update: 2024-09-15 11:56:53 UTC


README

Hashidable 使用 hashids 来混淆 Laravel 路由 ID。

安装

注意:此包是为与 Laravel 版本大于 7 的版本一起使用而构建的。它可能在旧版本上工作,但尚未进行测试。

composer require kayandra/hashidable

设置

导入 Hashidable 特性并将其添加到您的模型中。

use Kayandra\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' => '-',
];

模型级配置

您也可以在模型级别扩展全局配置。为此,您的模型应实现 Kayandra\Hashidable\HashidableConfigInterface 并在模型上定义 hashidableConfig() 方法。

此方法返回一个数组或与全局配置类似的选择的选项。

    public function hashidableConfig()
    {
        return ['prefix' => 'app'];
    }

常见问题解答

生成的哈希存储在哪里?

Hashidable 不会接触数据库来存储任何类型的元数据。它所做的相反是使用一个内部编码器/解码器来动态计算哈希。

许可证

MIT