Использование пакета vinkla / hashids в Laravel 5.2 для скрытия идентификаторов в URL

Я установил и настроил последнюю версию (2.3.0) vinkla / hashids на laravel 5.2.

Я не уверен, как реализовать его функциональность на моих маршрутах URL.

Я хочу запутать все атрибуты id, которые отображаются в моих URL-маршрутах.

Например- HTTP: // локальный: 8000 / Профиль / 3 / редактировать должен стать HTTP: // локальный: 8000 / Профиль / хуг / редактировать.

Я попытался переопределить следующий метод на Illuminate \ Database \ Eloquent \ Model.php, добавив его в App \ Profile.php как таковой

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

Мой dd не отображается, поэтому я не перезаписываю его правильно.

Подскажите пожалуйста, как мне правильно реализовать эту функцию?

Спасибо

3

Решение

Вот что я делал для той же проблемы:

Скажите, что ваши маршруты

Route::get('/profile/{profile}', 'ProfileController@showProfile');

Тогда в модели:

// 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]);
}

Наконец, вам нужно привязать параметр маршрута «профиль». Вы должны сначала декодировать его, а затем искать в базе данных (привязка по умолчанию не будет работать). Итак, в 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);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]