2016-06-16 6 views
3

のIDを取得しました。laravel 5.2にvinkla/hashidsの最新バージョン(2.3.0)をインストールして設定しました。Laravel 5.2のvinkla/hashidsパッケージを使用してURLの

URLルートでその機能を実装する方法がわかりません。

私のURLルートに表示されるすべてのid属性をobsfucateしたいと思います。

たとえば、http://localhost:8000/profile/3/edithttp://localhost:8000/profile/xyz/editになるはずです。

SO-

public function getRouteKey() 
{ 
dd('getRouteKey method'); 
    return Hashids::encode($id); 
} 

私のddは私はありませんので、表示されていないとして、私はアプリの\ Profile.phpに追加することで、\を照らし\ Databaseで次のメソッドをオーバーライド雄弁\ Model.phpを試してみましたそれを正しく上書きする。

この機能を正しく実装する方法を教えてください。ここで

答えて

1

は、私は同じ問題のためにやっているものだ

ありがとう:次のようにする必要があり

最後に
// Attribute used for generating routes 
public function getRouteKeyName() 
{ 
    return 'hashid'; 
} 

// Since "hashid" attribute doesn't "really" exist in 
// database, we generate it dynamically when requested 
public function getHashidAttribute() 
{ 
    return Hashids::encode($this->id); 
} 

// For easy search by hashid 
public function scopeHashid($query, $hashid) 
{ 
    return $query->where('id', Hashids::decode($hashid)[0]); 
} 

はあなたのルートを言うのモデルに続いて

Route::get('/profile/{profile}', '[email protected]'); 

を持っていますルートパラメータ "profile"をバインドします。最初にデコードしてから、データベースを検索する必要があります(デフォルトのバインドは機能しません)。だから、app/Providers/RouteServiceProvider.phpに:

/** 
* Define your route model bindings, pattern filters, etc. 
* 
* @param \Illuminate\Routing\Router $router 
* @return void 
*/ 
public function boot(Router $router) 
{ 
    Route::bind('profile', function($hashid, $route) { 
     try { 
      return Profile::hashid($hashid)->first(); 
     } 
     catch (Exception $e) { 
      abort(404); 
     } 
    }); 

    parent::boot($router); 
} 
+0

私は明示的なバインディングを使用したくなかった、私は、データベース内のハッシュ化されたフィールドを持つ必要となるいくつかの暗黙の結合... –

+0

@CaioKawasakiでこれを行う方法を知っていただきたいと思いますよくあなたはそれが欲しいですか? – alepeino

関連する問題