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'));
}
这几天,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'));
}