我正在尝试创建具有某种形式的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上,我想显示表单以创建新产品
答案 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