Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день!
Есть контроллеры Records, Items .... в которые передаются ID ввида /records/1, /records/2 .... /items/1, /items/2 .... возникла необходимось скрывать эти ID.
Пример роутера
Route::group(['prefix' => 'records'], function() {
Route::get('/{id}', ['uses' => 'Records@getRecords'])->where('id', '[0-9]+');
.............
Подскажите наилучший вариант, при котором можно получить шифрованый вид типа /records/H$Ur95%92 (какой-либо хеш) для всех контроллеров (Records, Items...). Первый вариант был создать таблицу с набором id <-> hash и проверять в роутере передаваемый hash. Но как я считаю этот вариант не совсем правильный, так как при добавлении нового рекорда(ID) необходимо записывать(проверять) новый hash. Я пологаю есть простой вариант все это сделать красиво через routers, без всяких доп таблиц.
Т.е. во view что-то типа:
$id= Crypt::encrypt(['id' => 1 ]);
<a href="{{url('/records/',$id)}}" target="_blank">get record</a>
А уже как-то в роутере в обратную сторону:
....
Route::get('/{id}', function($id){
..... Crypt::decrypt($id);............
});
Еще вопрос, а может есть обобщеный вариант? с логикой в роутуре, если какое либо ID это число, тогда преобразуем в hash, и наоборот, если ID это строка(hash) тогда в число и дальше передача нужному контроллеру этого ID, тогда мне не пришлось бы расшифровывать в каждом роутуре к контроллеру этот ID, грубо говоря глобальное правило.
Не в сети
всё придумано до нас https://github.com/vinkla/laravel-hashids
Не в сети
Страницы 1