Не может иметь два маршрута одновременно - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать eshop (я хочу изучать laravel) с какой-то формой для добавления данных.

У меня есть два маршрута: первый для отображения продукта (product / {id}) и второй для создания нового продукта (product / create). Но когда я пытаюсь показать какой-то продукт, он показывает 404, так же, как на втором сайте.

Когда я удаляю второй маршрут, все работает, но вместе они не работают.

Route::group(['middleware' => 'web'], function () {

    // Products
    Route::get('/product/', 'ProductController@index')->name('product.all'); //All products
    Route::get('/product/{id}/', 'ProductController@show')->name('product.id'); // Only one product with id

    Route::group( ['middleware' => 'auth'], function() {

        // Products
        Route::get('/product/create/', 'ProductController@create');// Form to add new product


    });

});

Когда я захожу на URL / product / 8, я хочу показать продукт с идентификатором 8, но на url / product / create я хочу показать форму для создания нового продукта

Ответы [ 4 ]

2 голосов
/ 16 мая 2019

Это происходит потому, что ваш второй маршрут, означающий /product/create, переопределяет первый, поэтому вы либо перемещаете маршрут /product/{id} под созданным маршрутом, либо вы всегда можете добавить ограничение regex на маршрут следующим образом:

Route::get('/product/{id}/', 'ProductController@show')
   ->name('product.id')
   ->where(['id' => '[0-9]+']);
1 голос
/ 16 мая 2019

Вы должны переместить свой маршрут создания вверх, потому что ваш маршрут /product/create переопределяет /product/{id}

Измените ваши маршруты, как показано ниже:

Route::group(['middleware' => 'web'], function () {

    // Products
    Route::group( ['middleware' => 'auth'], function() {
        // Products
        Route::get('/product/create/', 'ProductController@create');// Form to add new product
    });

    Route::get('/product/', 'ProductController@index')->name('product.all'); //All products
    Route::get('/product/{id}/', 'ProductController@show')->name('product.id'); // Only one product with id

});
1 голос
/ 16 мая 2019

вам не нужно добавлять промежуточное веб-ПО, поскольку оно добавляется ко всем маршрутам в web.php


    // Products
    Route::get('/product/', 'ProductController@index')->name('product.all'); //All products


    Route::group( ['middleware' => 'auth'], function() {

        // Products
        Route::get('/product/create/', 'ProductController@create');// Form to add new product


    });

    Route::get('/product/{id}/', 'ProductController@show')->name('product.id'); // Only one product with id

0 голосов
/ 16 мая 2019
    Route::group( ['middleware' => 'auth'], function() {
        // Products
        Route::get('/product/create/', 'ProductController@create');
    });
    Route::get('/product/', 'ProductController@index')->name('product.all');
    Route::get('/product/{id}/', 'ProductController@show')->name('product.id')->where(['id' => '[0-9]+']);

Я обновил свой код, но URL / product / 8 / все еще 404

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