2016-10-20 7 views
0

フォーム内で、ユーザーは2つのドロップダウン(たとえば、都市と町)内を検索して選択できます。フォームを送信したら、URLに選択したドロップダウンオプションを含むURLにリダイレクトする必要があります。フォームを介してパラメータを送信し、前記パラメータに基づいてURLを作成する

フォーム提出時に、www.domain.co.uk/city/townにリダイレクトされます。

私は、URLパラメータの概念と、それらを経路に渡す方法を把握するのに苦労しています!

現在の設定:

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

私はURLに投稿したい2つのフィールドは次のとおりです。

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

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

は、私は承知しています私は後者のIDを掲示しなければならないので、実際のnameフィールドをDB内に格納し、使用するためにそれを返します(私はスラッグを生成する必要があります)。

ルート

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内の2つのフィールドの値を使用できますか?私はそれが間違った方法に近づいていると思うが、私は代替案を考えることはできない。

大変ありがとうございます。前もって感謝します。

答えて

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で利用できるようにするには、Routegetのリクエストである必要があります。 postではありません。

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

次に、あなたのコントローラで、あなたのパラメータのリストにそれらを追加するだけでそれらを得ることができます。

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

いいえ、これらの変数をURL内で使用したいと思います。たとえば、ドロップダウンでTexas(town)とFrance(city)を選択すると、フォームが送信されると、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> 

を入力/選択の要素はまだあなたが好きなものにあなたのルートの構造を変えることができるフォームファサード

関連する問題