jvizcaya/encodid

Laravel 编码ID助手

v0.0.4 2022-01-10 16:46 UTC

This package is auto-updated.

Last update: 2024-09-10 23:29:29 UTC


README

Encodid 为Laravel 5.7+提供编码和解码整数ID的助手,允许从我们的表格ID生成唯一的非序列文本字符串,这样我们可以在公开路由(URL)中显示生成的字符串而不是原始值,这样可以使路由更不可预测,从而为我们的应用程序添加一个额外的安全层。

Encodid 使用PHP库 Hashids 来编码和解码ID值,并受Laravel包 laravel-hashids 的启发。

安装

composer require jvizcaya/encodid

使用方法

正确安装包后,助手将在应用的任何地方可用。

编码值

要从ID值生成编码字符串,我们使用助手 encodeId(),并需要传递要编码的ID值。

  $id = 347;
  $encode_id = encodeId($id); // 3kTMdQl1zu

我们可以在视图中使用 encodeId() 助手或为我们的模型创建一个自定义的 Eloquent 访问器

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{

    /**
     * Model Accessors.
     *
     *
     */
     public function getEncodeidAttribute()
     {
         return encodeId($this->id);
     }
}

这样我们就可以从模型对象本身获取编码字符串的值。

  $post->encode_id;  // LkTM1Ql1Xa

可选地,我们可以使用助手 encodeIds() 从ID数组生成编码字符串。

  $ids = [14, 36, 89];
  $encode_ids = encodeIds($ids); // o2fXhVWKlu

解码值

要恢复编码字符串的原始ID值,我们使用助手 decodeId(),需要传递编码字符串的值。

  $encode_id = '3kTMdQl1zu';
  $id = decodeId($encode_id); // 347

助手 decodeIds() 允许我们使用 encodeIds() 函数恢复之前编码的ID数组的原始值。

  $encode_ids = 'o2fXhVWKlu';
  $ids = decodeIds($encode_ids); // [14, 36, 89]

有时我们可能需要解码编码字符串数组,对于这种情况,我们可以使用助手 decodeArrayIds()

  $encode_ids = [o2fXhVWKlu, uLkmPqwr1u, QP13YuOp7T];
  $ids = decodeArrayIds($encode_ids); // [42, 1935, 5456]

配置

我们可以通过发布配置文件来配置ID或ID数组的编码方式。

php artisan vendor:publish --provider="Jvizcaya\Encodid\EncodidServiceProvider"

这将在 config 目录中创建一个 encodid.php 文件,然后我们可以更改以下配置参数。

salt_string 将由hashids库用于编码的盐字符串。

length 编码字符串的长度。

format_string 编码字符串中可能出现的字母数字字符的模式。

许可证

MIT © Jorge Vizcaya | jorgevizcayaa@gmail.com