2016-09-26 7 views
-1

ユーザーは開始位置を入力できるフォームを用意しています。この位置に中心のマップに移動します。彼はこのステップをスキップして地図に直接行くこともできます。Laravelは値の代わりにパラメータ名を表示します(ルートでオプションのパラメータを使用する場合)

これは最初のコードで、ユーザーがフォームを使用したときにフォームから開始位置を取得し、マップにリダイレクトされます。(心配しないでください計画変数、それは常に)、この例の目的のために自身 "になります

Route::post('InitiateUserTrip', ['as' => 'InitiateUserTrip', function(WelcomeFormRequest $request) 
{ 
    if (Input::get('planning') == 'own') { 
     return Redirect::route('Map',array('startLocation', Input::get('startLocation'))); 
    } else { 
     return view('welcome'); 
    } 
} ]); 

これは、マップのルートである上記で説明したように、startLocationはオプションです。 (APIキーは私の個人的なAPIキーになります。)私がここで起きているのは、デバッグバーがパラメータの値の代わりに 'startLocation'を表示していることです。 (値の代わりに名前)

Route::get('Map/{startLocation?}', ['as' => 'Map', function($startLocation = null) 
{ 
    $map = new Map('API KEY',$startLocation,'GMainMap');  
    $googleMap = $map->getMap(); 
    $node = new Node(); 
    $node->loadBySelection('ALL'); 
    $nodes = $node->getNodes(); 
    \Debugbar::info("Map: " . $startLocation); 
    return View::make('map')->with('map', $googleMap) 
          ->with('nodes',$nodes) 
          ->with('startLocation',$startLocation); 
}]); 

私は何が起こっていたのかを見るためにURLで遊び始めました。 startLocationこれは、次のURLにつながるように、ユーザーが 'マイアミ' を入力すると仮定:

http://laravel.dev/Map/startLocation?Miami => 'startLocation'

私はURLを自分で修正する

http://laravel.dev/Map/Miami => Debugbar表示されるでしょう「マイアミを示すだろうDebugbar '

間違った内容を表示するのはDebugbarだけではありません。私はこの変数に基づいてジオコードしようとすると、 'startLocation'と同様に内容を見るので失敗します。

私はこの問題を2つの経路を作成することで解決できるかもしれません.1つはパラメータなしで、もう1つは経路を作成することができます。

+0

なぜ「?」を使用していますか?これを削除する –

+1

@ImtiazPabel '? 'は、ルートパラメータがオプションであり、完全に有効であることを意味します。 – Jonathon

+0

ルートパラメータは 'GET'パラメータと同じではないことに注意してください(URLの'? 'に続くクエリ文字列から)。 '/ Map/Miami'は' $ startLocation'の '' Miami ''を正しく返します。 '/ Map/startloaction?Miami'は' $ startLocation'の '' startLocation "'を正しく表示します。実際にURLを選択するだけで、URLと 'GET'パラメータの両方を使用しようとしています。 –

答えて

0

あなたのルートコール

Redirect::route('Map',array('startLocation', Input::get('startLocation'))); 
内のエラーを持っています

この場合:

Redirect::route('Map',array(Input::get('startLocation'))); 

ルートコールでキーを指定する必要はありません。配列は配列内の位置に基づいて、指定されたルートのパラメータとペアになります。ルートの最初のパラメータへの配列の最初の項目、ルートの2番目のパラメータへの配列の2番目の項目など

+1

鍵を使うのは大丈夫だが、試行された方法は間違っている。 '' startLocation '=> Input :: get(' startLocation ')) ' – user3158900

+0

私はもともとこれを助言したいと思っていましたが、私の解決策にはコードが少なくて済むようになりました。 –

+0

ありがとう、私の問題を解決! – DiscoFever

0

あなたのルートは期待通りに機能します。 {startLocation?}はURLの一部ではなく、のプレースホルダがに置き換えられていることに注意してください。

したがって、Route :: get( 'Map/{startLocation?}'、...);ルートはstartLocationのパラメータ値はマップ/の直後のものであるとします。したがって、に移動した場合、マップ/開始位置?startLocation文字列はパラメータの値と見なされます。

/地図/マップ/ startLocationの両方にサービスを提供する最も簡単な方法は、マイアミ URLの2つのルートを定義することです:?

Route::get('Map', ...); 
Route::get('Map/startLocation?{startLocation}', ...); 
関連する問題