使用Hashids库来散列Laravel eloquent集合上的id

时间:2015-04-25 02:39:05

标签: php laravel laravel-5 hashids

我从数据库中抓取一组任务作为一个雄辩的集合,然后我将集合发送到我的视图foreach。这里没问题。除此之外,我需要在我的视图中引用任务id(网址操作等)。但我显然不希望在源代码中使用此功能,因此我使用此library来对代码进行哈希处理。但在视图中这样做似乎是错误的。

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

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

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

这就是我目前在我的视图中对ID进行哈希处理的方法:

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

任何帮助?

2 个答案:

答案 0 :(得分:6)

您可以使用访问器方法执行此操作。首先,在任务模型的顶部附加一个新属性:

protected $appends = ['hashid'];

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

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

完成后,只需在视图中调用附加属性:

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

答案 1 :(得分:0)

您可以使用Laravel Hashslug库,该库可以通过最少的设置自动为您完成此操作:

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