2017-12-07 13 views
1

私はドラフトとして保存できるフォームを持っています。最初のルートには送信されていないため、送信されたIDのパラメータはありません。保存されると、送信されたIDがルートに格納され、データを取得してユーザーに表示します。URIパラメータのない適切なLaravelルーティング

私は現在、これに対応するために複数のルートを作成していますが、これは非常に面倒であり、これがどのように維持するための問題になるかを見ることができます。

経路にパラメータがないこと、たとえば欠落している変数でエラーが発生するフォームルートやコントローラをどうやって説明できますか?

ルート:

Route::get('/request/{unit}/{id}', 
    '[email protected]')->name('request.show-new-request'); 

Route::get('/request/{unit}/{id}/{rid}', 
    '[email protected]')->name('request.show-request'); 

Route::post('/request/{unit}/{id}', 
    '[email protected]')->name('request.store-new'); 

Route::post('/request/{unit}/{id}/{rid}', 
    '[email protected]')->name('request.store'); 

コントローラ

public function showNewRequest($unit, $id) { } 

public function showRequest($unit, $id, $rid) { } 

フォーム/ブレード:

@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 

答えて

2

あなたはルートパラメーターで?を使用することができます。これにより、あなたはそれらを無視できます。そして、あなたはこのような何かにコードを変更することができます。

Route::get('/request/{unit}/{id}/{rid?}', 
    '[email protected]')->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. 
    } 
} 

これはまた、ルートをポストに適用されます。

関連する問題