新加入Laravel,
我的表格看起来像这个
{!! Form::open(array('action' => array('SearchController@postReviews' ), 'class'=>'form-inline')) !!}
<div class="form-group">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="input-group">
<div class="input-group-addon" style="width:110px;">Location</div>
<input type="text"
class="form-control "
id="mapsearch" name="mapsearch"
placeholder="Enter City,Pin or Address"
style="height:43px; min-width:402px; font-size:1.0em;" required/>
<div class="input-group-addon">
{!! Form::select('size',
array('Car' => 'Car', '2-Wheeler' => '2-Wheeler'),
'Car',
['id'=> 'carmodel', 'class' => 'form-control input-sm', 'style'=>'width:200px;',
'required'])
!!}
</div>
<input type="hidden" class="form-control input-sm" name="input_lat" id="input_lat" required>
<input type="hidden" class="form-control input-sm" name="input_lng" id="input_lng" required>
</div>
<button type="submit" class="btn btn-danger" id="btn_search" style="width:200px;height:42px;">Search</button>
</div>
</form>
我的控制器看起来像
public function postReviews()
{
$location = Input::get('mapsearch');
$input_lat = Input::get('input_lat');
$input_lng = Input::get('input_lng');
$inputs = ($input_lat && $input_lng);
if (!$inputs) {
$input_lat = 22.5667;
$input_lng = 88.3667;
}...
现在一切都很好。我能够毫无问题地产生结果。
困扰我的是,当我点击搜索时,我的URL保持不变。
即,搜索前URL为http://localhost/reviews
搜索后URL为http://localhost/reviews
我应该更改什么,以便在单击搜索按钮后我的url显示
http://localhost/reviews/(value from mapsearch field)
当您使用POST请求时,输入值会通过POST发送,而不会附加到URL(与get请求相反,在get请求中,它们会被发送到localhost/reviews?mapsearch=xxxx&Input_lat=xxxxx&Input_lng=xxxxx)。为了将该段添加到URL,您必须执行以下两项操作之一:
1) 在控制器中,处理输入,然后将它们重定向到映射到/reviews/{mapsearch}的路线
或
2) 在页面上使用一点javascript来更新URL,以显示mapsearch参数。为了更新他们看到的URL而不将其发送到新页面,你需要使用history.pushState。因此,在你看来,你会有
<script>
history.pushState({},"URL Rewrite Example","http://localhost/reviews/{{Input::get('mapsearch')}}")
</script>
这将更新他们的URL以显示该参数。这不是所有浏览器都支持的,尤其是IE<10
首先创建一个控制器动作
public function reviewWithUri($uri,$data){
return view('YOUR_VIEW_FILE')->with(['data'->$data]);
}
然后更改您的postReview返回以重定向到此操作。
public function postReview(){
........
return redirect()->action('ReviewController@reviewWithUri', ['uri' =>$uri,'data'=>$data]);
}
最终路由
Route::get('review/{uri}', ['uses' => 'ReviewController@reviewWithUri', 'as' => 'review.uri']);