【发布时间】:2017-02-03 19:43:54
【问题描述】:
我有一个表单,用户可以在其中输入起始位置,提交时他将转到以该位置为中心的地图。他也可以跳过这一步,直接进入地图。 (这是跳过整个背景故事的简化版本)
这是第一段代码,当用户使用表单时,它将从表单中获取起始位置并重定向到地图:(不要介意计划变量,它始终是“自己的”)本例)
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”
当我自己修改网址时 http://laravel.dev/Map/Miami => 调试栏将显示“迈阿密”
不只是 Debugbar 会显示错误的内容。我尝试基于此变量进行地理编码,但它失败了,因为它也将内容视为“startLocation”。
我也许可以通过创建两条路线来解决这个问题,一条带参数,一条不带参数,但我想我只是遗漏了一些明显的东西。
【问题讨论】:
-
你为什么使用“?”在路线中,删除这个
-
@ImtiazPabel
?表示路由参数是可选的并且完全有效。 -
必须记住,路由参数与
GET参数不同(来自URL 中?后面的查询字符串)。/Map/Miami将正确地为$startLocation返回"Miami",就像/Map/startloaction?Miami将正确 为$startLocation显示"startLocation"。当您真的应该只选择一个时,您几乎尝试同时使用 URL 和GET参数。 -
有人能解释一下为什么这个问题被否决了吗?也许这是一个新手问题,但我正在努力学习,我认为每个人有时都会犯愚蠢的错误。我也尽力提出一个清晰的问题,清楚地描述环境、情况和问题。所以请在这里帮助我,只是通过否决这个问题,我不会学习如何为未来改进我的帖子。 (我已经看过“如何提问”)
标签: php google-maps laravel routing laravel-5.1