Слаг и идентификатор продукта в неявной маршрутизации

Я пытаюсь понять, как использовать/отображать слаг моего продукта и идентификатор в URL-адресе моего продукта, используя неявную привязку к Laravel.

Используя getRouteKeyName(), который возвращает продукт slug, я могу отобразить слаг моего продукта, например. store.com/product/my-awesome-product. Я также хочу добавить идентификатор продукта в конце URL-адреса, например. store.com/product/my-awesome-product/1.

Возможно ли это с getRouteKeyName() или мне нужно предварительно сформировать запрос на поиск продукта по идентификатору и ярлыку, как в этом посте: Как передать два аргумента id и slug с URL-адресом (маршрутизацией) в laravel 5.1.

Или также можно игнорировать ярлык продукта, но все же иметь его в URL-адресе?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
400
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В выпусках laravel github есть закрытая проблема, однако вы можете попробовать что-то вроде этого:

Route::get('products/{product:slug}', 'ProducController@show')->name('product.show'); // Finds product by slug.
Route::get('products/{product}', 'ProducController@show')->name('product.show'); // Finds Product by ID (or whatever is defined in getRouteKeyName()).

route('product.show', $product) -> store.com/product/my-awesome-product
route('product.show', $product) -> store.com/product/1

Для получения дополнительной информации проверьте этот ссылка на сайт

Ответ принят как подходящий

У вас может быть параметр в URL-адресе, который предназначен только для целей SEO (представления) и не способствует логике внутри контроллера.

так :

Route::get('products/{productID}/{ProductName}', 'ProducController@show')->name('product.show');

и внутренний контроллер:

public function show($productId, $productName){

  $product = Product::findOrFail($id);

  // You can add this optional check to 
  // make sure product name is correct
  $slug = str_slug($product->name, '-');

  if (!str_contains($slug, $productName)){
    abort(404);
  }

  return view('product')->with(compact('product'));
}

Другие вопросы по теме