Laravel 5.4 Id模糊变换器中的混淆jenssegers

时间:2017-04-19 21:23:51

标签: laravel obfuscation

Id混淆现在给我带来了麻烦。我确实设法在吸气剂中使用外墙,但是设定它并不特别在关系中起作用。我没有混淆检查关系,它的工作原理。我认为只有在提交表单时才会应用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并且在建立关系时它不再具有原始值。我怎样才能直接解码呢?

1 个答案:

答案 0 :(得分:2)

在您的模型中,您可以设置路由密钥以对其进行模糊处理,而不必弄乱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'));
}