2017-12-07 17 views
1

초안으로 저장할 수있는 양식이 있습니다. 초기 경로에는 전송 된 ID가없는 매개 변수가 없습니다. 저장되면 경로에는 제출 된 ID가 포함되어 데이터를 검색하여 사용자에게 표시합니다.URI 매개 변수가없는 올바른 라우트 라우팅

현재이 문제를 해결하기 위해 여러 경로를 만들고 있는데, 이는 매우 혼란스럽고 유지 관리에 문제가 있음을 알 수 있습니다.

경로에 매개 변수가 없음, 특히 누락 된 변수에 오류가 발생하는 양식 경로 나 컨트롤러를 어떻게 설명 할 수 있습니까?

경로 :

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. 
    } 
} 

이것은 또한 경로를 게시 적용됩니다.