使用 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) }}">
我从数据库中抓取一组任务作为 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) }}">