没有 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 路线。