Laravel 5(URL未显示搜索参数)


Laravel 5 (URL not showing search parameters)

新加入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']);