Задать вопрос
@antonov_tag1

Как сделать динамический роутинг в магазине на laravel?

Не могу реализовать роутинг для продукта.

файл web.php
Route::get('/brands', [\App\Http\Controllers\BrandsController::class, 'all'])->name('brands.index');
Route::get('/brands/{brand_slug}', [\App\Http\Controllers\BrandsController::class, 'brand'])->name('brand');

Route::get('/categories', [\App\Http\Controllers\CategoryController::class, 'index'])->name('categories.index');
Route::get('/{category_slug}', [\App\Http\Controllers\CategoryController::class, 'category'])->name('category');

Route::get('/{cat_slug}/{slug}',[\App\Http\Controllers\ProductController::class,'product'])->name('product');


ProductController
public function product($slug)
    {
        $product = Product::where('slug', $slug)->firstOrFail();
        $cat_slug = $product->category->slug;

        return view('product.index', [
            'product' => $product,
            'cat_slug' => $cat_slug,
        ]);
    }

ссылка в blade
<div class="item-title">
        <a href="{{route('product', [$item->category->slug,$item->slug])}}">
            {{$item->name}}
        </a>
    </div>


Хочу реализовать УРЛ типа site.ru/name-category/name-product
Но при данной реализации урл формируется но при переходе отдает 404
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
public function product($slug)
    {
        $product = Product::where('slug', $slug)->firstOrFail();


Здесь должно быть два параметра - категория и продукт.
Первым идет категория.
Вы ищете продукт, но в условие попадает слаг категории, запись не находится, и выбивает 404

То, что имя параметра метода совпадает с именем параметра в роуте, ничего вам не дает, потому что вы не используете биндинг.

Route::get('/{category:slug}/{product:slug}',[\App\Http\Controllers\ProductController::class,'product'])
    ->name('product');

public function product(Category $category, Product $product)
    {
        return view('product.index', [
            'product' => $product,
            'cat_slug' => $category->slug,
        ]);
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы