Php 如何通过API调用在URL中加载玩家名称-Laravel 5

Php 如何通过API调用在URL中加载玩家名称-Laravel 5,php,laravel,url,routes,Php,Laravel,Url,Routes,我想在我的URL中显示玩家标签。我遇到的问题是我不知道如何在搜索框中请求玩家标签,因为我是通过API调用请求玩家标签的 现在,这就是我所说的路线: Route::post('/Player/Stats', [ 'as' => 'player-stats', 'uses' => 'StatsController@index' ]); /---------------------------------------------------

我想在我的URL中显示玩家标签。我遇到的问题是我不知道如何在搜索框中请求玩家标签,因为我是通过API调用请求玩家标签的

现在,这就是我所说的路线:

    Route::post('/Player/Stats', [
        'as' => 'player-stats',
        'uses' => 'StatsController@index'
    ]);
/-------------------------------------------------------------------------

// this is how I set up my search box for home page
<form action="{{ route('player-stats') }}" method="POST">
      {!! csrf_field() !!}
      <input type="text" name="gamertag" id="gamertag" class="form-control" title="Gamer-tag" style="width:40%" required>
      <button class="btn btn-lg btn-primary" type="submit">Find</button>
 </form>

我不能在我的行动中这样做:

action=“{route('player-stats',$gamertag}”


因为$gamertag没有存储在任何地方

这里的问题与PHP无关,而与JavaScript有关

您需要使用HTML5提供的
历史API
。这将允许您将/pop
状态
推离历史。这最终意味着您可以修改URL地址

让我们看一下这需要什么,我们假设您正在通过一个ajax请求从一个控制器返回一个JSON对象,该请求是从一个搜索输入的表单提交中触发的

public function MyController(Request $request){
    $model = Models::where('key', $request->get('value'))->first();
    return response()->json($model);
}
当然,还有相关的Ajax和jQuery

$('form').on('submit', function(e){
    e.preventDefault();
    $.ajax({
         //props
         dataType: 'json'
    }).done(function(response){
        //magic
        history.pushState(null, null, 'Player/stats/'+response.gamertag);
    });
});
history.pushState
在这里要做的是修改URL并根据
pushState
函数的第三个参数进行更改。注意您不能更改域名,因此URL仅在FQDN之后进行操作,例如
http://example.com
。但是您确实需要提供
完整的p将FQDN作为第三个参数后的ath

.pushState()
的第一个参数是
数据
。然后,您可以将
ajax响应对象
存储在此状态中。当用户在浏览器中单击
返回
时,
popState
事件触发,允许我们访问该状态。让我们看一看

$(window).on('popState', function(e){
    //e.state contains the data, otherwise e.originalEvent.state will.
});
最常见的用例是将
ajax响应
存储在状态内部,因此当在浏览器中单击后退时,您只需重新执行在
.done()
响应中执行的任何操作

var $results_container = $('.results-container');
function showResults(response){
    //parsing and logic here to handle the ajax response and "Show Results"

    $results_container.empty();
    $.each(response.row, function(i, row){
        $results_container.append(row);
    });
}
现在,在您的
ajax.done()
函数中,您可以将响应传递给我们的函数

.done(function(response){
    showResults(response);
});
但是,我们现在也可以在
popState()函数中执行同样的操作

$(window).on('popstate', function(e){
    showResults(e.state);

    //or maybe it's showResults(e.originalEvent.state)
    //honestly can't remember
});

希望这能让你朝着正确的方向前进。

选择这个{gamertag?}并通过js更新url。这不是解决方案,只是另一种方式。进一步解释会很方便,伙计,你能解释更多你想要什么和你想做什么吗?我想显示一个玩家的名字(gamertag)在URl中,当在搜索框中键入玩家标签时
$(window).on('popstate', function(e){
    showResults(e.state);

    //or maybe it's showResults(e.originalEvent.state)
    //honestly can't remember
});