Используйте другой идентификатор для показа маршрута в laravel - PullRequest
0 голосов
/ 03 июля 2018

Показать маршрут работает с / example / {id}. Поэтому, когда я создаю продукт с id = 1, show/1 покажет мне этот продукт.

Однако я хочу создать уникальный ключ для идентификатора, чтобы его могли просматривать только люди с URL. Уникальный идентификатор = 21J2 @ 29SAHAS198S, поэтому продукт 1 будет отображаться с /show/21J2@29SAHAS198S.

Я попытался создать параметр в ключе миграции, который равен $random = str_random(40); Затем я установил $ key в качестве первичного идентификатора в табличной модели. Это все еще не работает

Ответы [ 4 ]

0 голосов
/ 03 июля 2018

Если вы хотите установить строку $ key в Primary Keys, вы должны установить

public $incrementing = false
protected $keyType = 'string'

в вашей модели продукта

См. https://laravel.com/docs/5.6/eloquent#Primary-Keys

0 голосов
/ 03 июля 2018

Вы можете использовать base64 encode для кодирования параметра ID, например, при создании URL. Пример / {base64_encoded_id} .

И когда вы используете этот параметр ID в своем коде, тогда просто используйте функцию декодирования base64, чтобы получить оригинальный идентификатор.

0 голосов
/ 03 июля 2018

Вы можете использовать ограничения регулярного выражения, как показано ниже:

Route::get('example/{id}', function ($id) { //.. })->where('id', '/[a-z0-9A-Z@]*/');

Для получения подробной информации о маршруте Laravel с регулярным выражением перейдите по ссылке ниже: https://laravel.com/docs/5.6/routing#route-parameters

0 голосов
/ 03 июля 2018

В вашей таблице продуктов создайте поле code примерно так и определите его как уникальное, и во время создания продукта вставьте в него случайную строку, а затем укажите это поле в вашей модели Product в качестве ключа маршрута, подобного этому.

Модель продукта

class Product extends Model {

  public function getRouteKeyName()
  {
    return 'code';
   }
}

Теперь определите в своем маршруте show/{product};

Route::get('show/{product}', 'ProductController@show');

Контроллер

class ProductController extends Controller {

  public function show(Request $request, App\Product $product){

     dd($product)
  }
}

Подробнее см. Неявная привязка in https://laravel.com/docs/5.6/routing#implicit-binding

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...