【问题标题】:Laravel - Encoding does not work in getRouteKey - (Hashids\Hashids)Laravel - 编码在 getRouteKey 中不起作用 - (Hashids\Hashids)
【发布时间】:2020-10-06 18:36:01
【问题描述】:

我正在尝试在我的 URL 中对递增的 ID 进行哈希处理。我似乎无法正确编码,我遵循了 thisthis 教程,但没有帮助。我在控制器中尝试了getRouteKey() 中的代码,它似乎正在完成这项工作并按预期对 ID 进行哈希处理。

有人知道我做错了吗?

public function getRouteKey()
{
    $key = $this->getKey();
    $hashids = new \Hashids\Hashids('MySecretSalt', 5);
    return $hashids->encode($key);
}

更新 然后我使用如下绑定/解码;

    Route::model('property', Property::class);
    Route::bind('property', function ($value, $route) {
        $hashids = new \Hashids\Hashids('MySecretSalt', 5);
        return $hashids->decode(intval($value))[0];
    });

我的路线是;

Route::get(
    '/{property}/vvv/',
    'PropertyController@property_dashboard'
)->name('property.dashboard');

【问题讨论】:

  • 你不会将 hashid 转回常规 id,在任何地方对其进行解码
  • @lagbox 我想我会在设置解码之前先完成散列逻辑,我在上面添加了,这不起作用。 return $hashids->decode(intval($value))[0]这个返回Undefined offset: 0 ,你认为解码是编码的问题?
  • 编码有什么问题......你自己的话说它在控制器中正确地散列它......那么你的问题的实际问题是什么?
  • @lagbox 正如我所说,它只适用于控制器(如下所示),而不是当我放入 getRouteKey() 函数时。 $key = $property->getKey(); $hashids = new \Hashids\Hashids('MySecretSalt', 5); return $hashids->encode($key);

标签: laravel routes obfuscation hashids


【解决方案1】:

我猜您使用的是 javascript 前端而不是刀片,因此您无法访问 Laravel 路由功能。如果那是真的,并且您正在使用 Ziggy 之类的东西来创建您的路线,您总是可以将 hashid 传递给 ziggy 的 route 方法。你可以在你的模型中创建一个 hashid 属性,然后返回到前端。

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多