Laravel 5.4 模型修改器中的 Id 混淆 jenssegers

Laravel 5.4 Id Obfuscation jenssegers in Model mutators

这几天,Id 混淆让我很头疼。我确实设法在 getter 中使用了外观,但 setter 它在关系中并不特别有效。我已经在不混淆的情况下检查了关系并且它有效。我认为 setter 只会在提交表单时应用。这是我的代码。

 public function merchantCategory(){


    return $this->hasMany('App\MerchantCategory', 'maincategory_id', 'id');
}

public function getIdAttribute($value){

    return Obfuscate::encode($value);
}

public function setIdAttribute($value){

  return Obfuscate::decode($value);
}

唯一的问题是关系,因为我使用了 getIdAttribute 并且在建立关系时它不再是原始值。怎么也能直接解码?

在你的模型中,你可以设置路由键来混淆它,而不必弄乱 getter 和 setter。

public function getRouteKey()
{
    return Obfuscate::encode($this->getKey());
}

所以现在使用 route() 助手时,它与不混淆时完全一样。

route('route.path', $model)

在您的 RouteServiceProvider 中添加模型绑定以完成它:

public function boot()
{
    Router::bind('model', function($value)
    {
        return Model::find(Obfuscate::decode($value));
    });

    parent::boot();
}

这样,您的关系仍然使用普通 ID 而不是混淆它,并且您仍然在控制器中绑定模型。

public function show(Model $model)
{
    return view('model.show', compact('model'));
}