没有 URI 参数的正确 Laravel 路由
Proper Laravel routing with absence of URI parameters
我有一个可以保存为草稿的表格。初始路由将没有带有已提交 ID 的参数——因为它尚未提交。保存后,路由将包含提交的 ID 以检索数据并将其显示给用户。
我目前正在创建多条路线来适应这一点,这非常混乱,可以看出这将是一个维护问题。
我如何解释路由中缺少参数的原因,尤其是表单路由或控制器因缺少变量而引发错误?
路线:
Route::get('/request/{unit}/{id}',
'RequestsController@showNewRequest')->name('request.show-new-request');
Route::get('/request/{unit}/{id}/{rid}',
'RequestsController@showRequest')->name('request.show-request');
Route::post('/request/{unit}/{id}',
'RequestsController@storeNew')->name('request.store-new');
Route::post('/request/{unit}/{id}/{rid}',
'RequestsController@store')->name('request.store');
控制器
public function showNewRequest($unit, $id) { }
public function showRequest($unit, $id, $rid) { }
Form/Blade:
@if(isset($rid))
<form class="form-horizontal" method="POST" enctype="multipart/form-data"
action="{{ route('request.store', ['unit' => $unit, 'id' => $id, 'rid' => $rid]) }}">
@else
<form class="form-horizontal" method="POST" enctype="multipart/form-data"
action="{{ route('request.store-new', ['unit' => $unit, 'id' => $id]) }}">
@endif
您可以在路由参数中使用?
。这会让你忽略它们。然后你可以把代码改成这样:
Route::get('/request/{unit}/{id}/{rid?}',
'RequestsController@showRequest')->name('request.show-request');
控制器:
public function showRequest($unit, $id, $rid = null) {
if ($rid) {
//Do something with $rid
} else {
//Do something considering that this is a draft.
}
}
这也适用于 post 路线。
我有一个可以保存为草稿的表格。初始路由将没有带有已提交 ID 的参数——因为它尚未提交。保存后,路由将包含提交的 ID 以检索数据并将其显示给用户。
我目前正在创建多条路线来适应这一点,这非常混乱,可以看出这将是一个维护问题。
我如何解释路由中缺少参数的原因,尤其是表单路由或控制器因缺少变量而引发错误?
路线:
Route::get('/request/{unit}/{id}',
'RequestsController@showNewRequest')->name('request.show-new-request');
Route::get('/request/{unit}/{id}/{rid}',
'RequestsController@showRequest')->name('request.show-request');
Route::post('/request/{unit}/{id}',
'RequestsController@storeNew')->name('request.store-new');
Route::post('/request/{unit}/{id}/{rid}',
'RequestsController@store')->name('request.store');
控制器
public function showNewRequest($unit, $id) { }
public function showRequest($unit, $id, $rid) { }
Form/Blade:
@if(isset($rid))
<form class="form-horizontal" method="POST" enctype="multipart/form-data"
action="{{ route('request.store', ['unit' => $unit, 'id' => $id, 'rid' => $rid]) }}">
@else
<form class="form-horizontal" method="POST" enctype="multipart/form-data"
action="{{ route('request.store-new', ['unit' => $unit, 'id' => $id]) }}">
@endif
您可以在路由参数中使用?
。这会让你忽略它们。然后你可以把代码改成这样:
Route::get('/request/{unit}/{id}/{rid?}',
'RequestsController@showRequest')->name('request.show-request');
控制器:
public function showRequest($unit, $id, $rid = null) {
if ($rid) {
//Do something with $rid
} else {
//Do something considering that this is a draft.
}
}
这也适用于 post 路线。