Laravel - Запретить дополнительные параметры слагаемых символов - PullRequest
0 голосов
/ 10 мая 2018

У меня есть несколько маршрутов с привязкой модели маршрута, которые направляют пользователей из Магазин > Категория > Продукт . Ссылки на маршрут работают нормально.

Но если пользователь добавляет в URL значение мусора, Laravel не выдает ошибку 404. Как вызвать ошибку 404, если пользователь добавляет в URL какой-либо дополнительный символ?

Маршрут

Route::get('/{shop_url}/{category_url}/{product_url}/buy', 'Controller@buy')->name('buy')->where(['shop_url', 'category_url', 'product_url' => '[\w\d\-]+(.*)']);

Route::get('/{shop_url}/{category_url}', 'Controller@view')->name('view')->where(['shop_url','category_url' => '[\w\d\-]+(.*)']);

Route::get('/{shop_url}', 'Controller@shop')->name('shop')->where('shop_url', '[\w\d\-]+(.*)');

Контроллер

public function shop($shop_url)
{
  $shop = Shop::where('shop_url', $shop_url)->firstorfail();
  return view ('shop', compact('shop'));
}

public function view($shop_url, $category_url)
{
  $shop = Shop::where('shop_url', $shop_url)->firstorfail();
  $category= Category::firstorfail();

  return view ('shop', compact('shop', 'category'));
}

public function buy($shop_url, $category_url, $product_url)

{
  $shop = Shop::where('shop_url', $shop_url)->firstorfail();
  $category= Category::where('category_url', $category_url)->firstorfail();
  $product = Product::firstorfail();

  return view ('shop', compact('shop', 'category', 'product'));
}

Здесь domain.com/shop-ca/clothing работает, и если пользователь вводит domain.com/shop-ca/clothes, он также отображает ту же страницу. Здесь я хочу, чтобы он отображал 404. Как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

У вас есть проверка $product_url в вашей функции buy и ошибка 404 вручную.

0 голосов
/ 10 мая 2018

Прежде всего, вы должны проверить свой слаг, в вашем коде я вижу эти строки:

$category= Category::firstorfail();// it will get the first route in the database, not the needed category

Итак, сначала попробуйте сделать это:

public function view($shop_url, $category_url)
{
   $shop = Shop::where('shop_url', $shop_url)->firstOrfail();
   $category= Category::where('category_url', $category_url)->firstOrfail();// I actually don't know the name of your slug field, but if the category is wrong, laravel will return 404 page.

   return view ('shop', compact('shop', 'category'));
}
...