我有一個表單,用戶可以輸入開始位置,提交時他將轉到以此位置爲中心的地圖。他也可以跳過這一步並直接轉到地圖。 (這是跳過整個背景故事的簡化版本)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這將導致以下網址:
http://laravel.dev/Map/startLocation?Miami => Debugbar會顯示 'startLocation'
當我修改URL自己 http://laravel.dev/Map/Miami => Debugbar會顯示「邁阿密'
這不僅僅是顯示錯誤內容的Debugbar。我嘗試基於此變量進行地理編碼,並且因爲它將內容視爲「startLocation」而失敗。
我可以通過創建兩個路徑來解決這個問題,其中一個有一個沒有參數,但我想我只是缺少一些明顯的東西。
爲什麼你使用「?」在路由中,刪除這個 –
@ImtiazPabel'?'表示路由參數是可選的並且完全有效。 – Jonathon
請記住,路由參數與GET參數不同(來自URL中'?'後面的查詢字符串)。 '/ Map/Miami'會正確地返回'''''作爲'$ startLocation',與'/ Map/startloaction?邁阿密'正確*顯示''startLocation''的startLocation'相同。當你真的應該選擇一個參數時,你正試圖使用URL和'GET'參數。 –