Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Encrypt ID для контроллера в routers » 28.10.2017 15:12:10

brothers
Ответов: 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, грубо говоря глобальное правило.

Подвал раздела