如果不提供参数,Laravel路由中的可选参数总是返回404页



我正在开发一个应用程序,不明白这里发生了什么。

在我的路由中,我添加了一个可选参数,但如果我不提供可选参数,它会返回404页。路由应该在具有或不具有可选参数的两个实例上都工作。

另一件事是,我也想在路由参数上添加where条件,但它不起作用。

web.php

Route::get('invoices/{type?}/create', 'InvoiceController@create')->where('type', '[A-Za-z]+')->name('invoices.create');
Route::post('invoices/{type?}', 'InvoiceController@store')->where('type', '[A-Za-z]+')->name('invoices.store');
Route::resource('invoices', 'InvoiceController')->except([
'create', 'store' 
]);

InvoiceController.php

/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create(Request $request, $type = null)
{
echo $type;
die;
}
/**
* Store a newly created resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpResponse
*/
public function store(Request $request, InvoiceValidator $invoiceValidator, $type = null)
{
echo $type;
die;
}

当我输入URL"时;http://localhost/project/invoices/create"它返回404,当我输入"0"时;http://localhost/project/invoices/recurring/create"然后它回声";反复出现的";控制器中的值。

我甚至试图删除路线上的where条款,但仍然不起作用。并且还尝试通过清除路由缓存和重新排序路由。但仍然存在同样的问题。

php(即使以下不起作用(

Route::get('invoices/{type?}/create', 'InvoiceController@create')->name('invoices.create');
Route::post('invoices/{type?}', 'InvoiceController@store')->name('invoices.store');
Route::resource('invoices', 'InvoiceController')->except([
'create', 'store' 
]);

您需要通过将可选参数移动到路线的末尾来避免歧义

最新更新