2016-10-20 37 views
0

在表單中,用戶可以在2個下拉列表(例如城市和城鎮)內進行搜索和選擇。他們提交表單後,我希望將其重定向到URL中所選的下拉選項。通過表單發佈參數,基於所述參數創建URL

因此,在表單提交後,他們將被重定向到www.domain.co.uk/city/town。

我正在努力掌握URL參數的概念,以及如何將它們傳遞給路由!

當前設置:

{!! Form::open(['route' => ['search'], 'method' => 'POST', 'id' => 'search']) !!} 

的兩個領域,其中我想張貼到網址是:

<input type="hidden" name="town" id="town"> 

{!! Form::select('city', $city, null, 
    ['class' => 'form-control', 'id' => 'city', 'required']) 
!!} 

我知道我將不得不張貼後者的ID,所以我必須查找實際的name數據庫中的字段並返回它使用(反正我必須生成slu))。

路線

Route::post('{city}/{town}', ['uses' => '[email protected]', 
     'city' => Input::get('city'), 'town' => Input::get('town')] 
)->name('search'); 

控制器:

public function search(Request $request) 
{ 
    return view('location.search'); 
} 

我如何使用URL中的兩個字段的值時,他們將被重定向?我想我以錯誤的方式接近它,但我想不出替代品。

任何幫助將大規模讚賞!先謝謝你。

回答

0

你可以在你的航線結構更改爲類似:

Route::post('search', '[email protected]')->name('search'); 
Route::get('{city}/{town}', '[email protected]')->name('location.show'); 

而且在您的控制器中:

public function show(Request $request, $city, $town) { 
    // Do something with $city & $town 
    return view('location.show'); 
} 

public function search(Request $request) { 
    $input = $request->only('city', 'town'); 
    // TODO: validate the input 
    return redirect()->route('location.show', $input); 
} 
+0

完美地工作。非常感謝 - 你從一夜無眠中拯救了我。 – Ben

0

如果你希望你的數據在url中可用,你的Route應該是get的請求。不是post

Route::get('{city}/{town}', '[email protected]'); 

然後,在你的控制器,你可以通過在參數列表中添加他們讓他們簡單地說:

public function search($city, $town) 
+0

不,我想在URL中使用這些變量。例如,如果他們在下拉菜單中選擇了德克薩斯州(城市)和法國(城市),那麼一旦他們提交了表單,網址將顯示爲 - www.domain.co.uk/france/texas。我希望這是有道理的。 – Ben

+0

所以你的路線應該是一個得到一個。 –

0

怎麼樣,我們採取另一種方法,並使用JavaScript沒有形式。舉例如下:

<input type="hidden" name="town" id="town" value="town"> 

<select name="city" id="city"> 
    <option value=""></option> 
    <option value="City1">City 1</option> 
    <option value="City2">City 2</option> 
    <option value="City3">City 3</option> 
    <option value="City4">City 4</option> 
</select> 
<button type="button" onclick="redirect()">Redirect</button> 
<script> 
    function redirect(){ 
     var city = document.querySelector('#city').value; 
     var town = document.querySelector('#town').value; 
     if(city != '' && town != ''){ 
      window.location = 'http://mydomain.co.ke/'+city+'/'+town; 
      //or 
      window.location = '/'+city+'/'+town; 
     } 
     else{ 
      alert('Select a city'); 
     } 
    } 
</script> 

作爲一個說明輸入/選擇元素仍然可以使用窗體門面創造