使用 Hashids 库对 Laravel eloquent 集合的 ID 进行哈希处理

Use Hashids library to hash ids on Laravel eloquent collection

我从数据库中抓取一组任务作为 eloquent 集合,然后我将集合发送到我的视图,在那里我执行 foreach。这里没有问题。除了,我需要在我的视图中引用任务 id(URL 操作等)。但我显然不想在源代码中使用这个,所以我使用 this library 来散列 id。但是在视图中这样做似乎是错误的。

有没有办法在模型或控制器中散列 id?

以下是我在控制器中调用集合的方式:

$tasks = Auth::user()->tasks()->orderBy('created_at', 'desc')->get();

这就是我目前在我看来散列 id 的方式:

<a href="{{ route('tasks.markascompleted', Hashids::encode($task->id)) }}">

您可以使用访问器方法来完成。首先,在 Task 模型的顶部附加一个新属性:

protected $appends = ['hashid'];

然后,在同一模型中,创建一个填充属性的访问器:

public function getHashidAttribute()
{
    return Hashids::encode($this->attributes['id']);
}

获得这些后,只需在视图中调用附加属性即可:

<a href="{{ route('tasks.markascompleted', $task->hashid) }}">

您可以使用 Laravel Hashslug 库,它会以最少的设置自动为您执行此操作:

class Task extends Model {
    use HasHashSlug;
}
<a href="{{ action('TaskController@markAsCompleted', $task) }}">