Laravel по-русски

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

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

#1 18.07.2022 12:55:49

Непонятный выброс исключения

Привет!
При использовании более одного параметра маршрута выбрасывает исключение 404.
Не могу понять в чем дело.
Запрашиваемый URI: http://www.site.loc/product-category/in-stock/page/2
Если запросить http://www.site.loc/product-category/in-stock/ всё работает, а если добавить page/2 , выбрасывает исключение 404.
роут:

Route::get('/product-category/{name}/{name1?}/{page?}',['uses'=>'ProductCategoryController@index']);

часть контроллера:

public function index( $name, $name1 = null, $page = null )
    {
        $category = DB::table('categories')->where('alias', $name)->first();
        dd($category);
        if ( empty( $category ) ) {
            abort( 404 );
        }

Если запрашивать с одним параметром, то распечатывает содержимое $category, а в противном случае - исключение 404. Пробовал делать все параметры обязательными и наоборот - всё равно при одном работает, а если больше одного нет. Почему так?

Не в сети

#2 Вчера 13:19:45

Re: Непонятный выброс исключения

The immediate `$name1` parameter could be greedily matching "page," leaving "2" unmatched, or the framework might be expecting "page" to be a value for `$name1` rather than a distinct segment indicating pagination.

To resolve this, you could try explicitly defining a separate route for pagination:

```php
Route::get('/product-category/{name}/{name1?}', ['uses' => 'ProductCategoryController@index']);
Route::get('/product-category/{name}/{name1}/page/{page}', ['uses' => 'ProductCategoryController@index']);
```

This ensures that the route with `/page/{page}` is specifically matched when pagination is involved, preventing the framework from misinterpreting "page" as a value for your optional `$name1` parameter.

Не в сети

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