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并且在建立关系时它不再具有原始值。我怎样才能直接解码呢?
答案 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'));
}