2016-09-26 1 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'을 표시하고 있다는 것입니다. (값 대신 이름)

나는 무엇이 계속되고 있는지보기 위해 URL을 가지고 놀기 시작했다. startLocation이는 다음 URL을 초래할 것처럼 사용자가 '마이애미'를 입력 한 가정 :

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

나는 URL에게 자신을 수정

http://laravel.dev/Map/Miami => Debugbar 보여줄 것 '마이애미을 보여줄 것 Debugbar '

잘못된 내용을 표시하는 것은 디버그 바가 아닙니다. 이 변수를 기반으로 지오 코딩을 시도하지만 내용이 'startLocation'으로 간주되기 때문에 실패합니다.

매개 변수가없는 매개 변수 하나와 매개 변수가없는 매개 변수 두 개의 경로를 만들어이 문제를 해결할 수 있습니다.

+0

왜 "?" 경로에서, 이것을 제거하십시오 –

+1

@ImtiazPabel'? '는 route 매개 변수가 선택적이며 완전히 유효 함을 의미합니다. – 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'))); 

경로 호출에서 키를 지정할 필요가 없습니다. 배열은 배열에서의 위치에 따라 지정된 라우트의 매개 변수와 쌍을 이루고 있습니다 (예 : 경로의 첫 번째 매개 변수에 배열의 첫 번째 항목, 경로의 두 번째 매개 변수에 배열의 두 번째 항목 등

+1

조금 더 명확하게하기 위해 키를 사용하는 것은 괜찮습니다. 그러나 시도 된 방식은 여전히 ​​잘못되었습니다. 'array ('startLocation'=> Input :: get ('startLocation'))' – user3158900

+0

원래는 이것을 조언하고 싶었지만, 내 솔루션은 코드가 적었습니다. 둘 다 맞습니다. –

+0

고마워, 내 문제를 해결! – DiscoFever

0

경로가 예상대로 작동합니다. {startLocation?}은 URL의 일부가 아니며 이 될 자리 표시자를으로 바꿉니다. 매개 변수의 실제 값입니다.

따라서 Route :: get ('Map/{startLocation?}', ...); 경로는 시작 위치의 매개 변수 값은 지도/ 바로 뒤에 오는 것입니다. 따라서 으로 가면 Map/startLocation? Miami, startLocation 문자열이 매개 변수의 값으로 사용됩니다. ?

모두 /지도/지도/startLocation 마이애미 URL을 제공하는 가장 쉬운 방법은이 개 경로 정의하는 것입니다 : 당신은 당신의 경로 호출에서 오류가

Route::get('Map', ...); 
Route::get('Map/startLocation?{startLocation}', ...);