一次不能有两条路线

时间:2019-05-16 15:44:21

标签: php laravel

我正在尝试创建具有某种形式的eshop(我想学习laravel)以添加数据。

我有两条路线,第一条用于展示产品(产品/ {id}),第二条用于创建新产品(产品/创建)。 但是,当我尝试展示某些产品时,它显示的是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时,我想显示ID为8的产品,但是在url / product / create上,我想显示表单以创建新产品

4 个答案:

答案 0 :(得分:2)

之所以会这样,是因为您的第二条路线constexpr会覆盖第一条路线,因此您可以将constexpr路线移至创建路线下方,也可以始终在该路线上添加/product/create约束像这样:

/product/{id}

答案 1 :(得分:1)

您不需要添加Web中间件,因为它已添加到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

答案 2 :(得分:1)

您必须将创建路径移到顶部,因为路径/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

});

答案 3 :(得分:0)

    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