Laravel 5.4模型突变中的Id混淆jenssegers

Laravel 5.4模型突变中的Id混淆jenssegers,laravel,obfuscation,Laravel,Obfuscation,这几天身份混淆让我头疼。我确实设法在getter中使用facades,但在setter中它并不特别适用于这段关系。我已经在没有混淆的情况下检查了这段关系,它起作用了。我认为setter将仅在提交表单时应用。这是我的密码 public function merchantCategory(){ return $this->hasMany('App\MerchantCategory', 'maincategory_id', 'id'); } public function get

这几天身份混淆让我头疼。我确实设法在getter中使用facades,但在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()
helper时,与不混淆时完全相同

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'));
}

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

public function getRouteKey()
{
    return Obfuscate::encode($this->getKey());
}
因此,现在使用
route()
helper时,与不混淆时完全相同

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'));
}

这个会有用的。。。我已经把工作搞砸了。。。哈哈哈。。。并创造了一个门面,让这个工作。不管怎样,非常感谢你的这一次。我将在下一个项目中接受并应用它。:)@Rbex我明白这是怎么回事!这个会有用的。。。我已经把工作搞砸了。。。哈哈哈。。。并创造了一个门面,让这个工作。不管怎样,非常感谢你的这一次。我将在下一个项目中接受并应用它。:)@Rbex我明白这是怎么回事!