2017-04-19 9 views
0

Id難読化は、私にこのごろ頭痛を与えています。私はゲッターでファサードを使うことに成功しましたが、それは特別な関係では機能しません。私は難読化せずに関係を確認し、それは動作します。私は設定者がフォームの提出時にのみ適用されると思う。ここに私のコードです。Laravel 5.4 Idモデルミューテーターの難読化ジンセーガー

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を使用して関係をやったときに、それはもう元の値がないからだとの関係です。どうすればそれを直接デコードすることもできますか?

答えて

2

モデルでは、getterとsetterを混乱させることなく、難読化するようにルートキーを設定できます。 route()ヘルパーを使用した場合

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

はだから今、それは正確にあなたが難読化していないときと同じです。

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

    parent::boot(); 
} 

この方法では、あなたの関係はまだ平野IDを使用してのではなく、それを難読化している、とあなたはまだモデルがでバインディングを取得:

route('route.path', $model) 

あなたRouteServiceProviderに結合モデルを追加し、それをオフに終了しますあなたのコントローラ。

+0

これはうまくいくでしょう...私はすでに私の仕事を混乱させています...ハハ...そしてこの仕事をさせるためにファサードを作りました。とにかく、ありがとうございました。私は次のプロジェクトでそれを受け入れて適用します。 :) – Rbex

+0

@Rbex私はそれがどうなるか理解しています! – Grant