laravel - 在路由中使用一个GET参数,但将其余参数传递给视图

时间:2016-03-21 09:36:31

标签: php forms laravel get laravel-5.2

我有这样的路线:

Route::get('/s', 'DashboardController@search');

打开这样一个视图的超级简单函数:

public function search() {
    return view('search');
}

这样的形式:

<form action="/s" method="get">
    <input type="text" name="location" placeholder="Where" required>
    <input type="text" id="checkin" placeholder="Check in" class="datepicker" required>
    <input type="text" id="checkout" placeholder="Check out" class="datepicker" required>
    <input type="submit" value="search now">
</form>

目前它通过网址发送参数,如下所示:

http://localhost/s?location=Location%2C+Name%2C+Here&checkin=21-03-2016&checkout=22-03-2016

但是,我真正希望在我的网址中看到的内容如下:

http://localhost/s/Location_Name_Here?checkin=21-03-2016&checkout=22-03-2016

现在我意识到我必须自己修改位置才能让它以一种非常漂亮的方式阅读。但是我如何才能使它最终使用作为路径中的参数的位置,同时仍然成功地通过签入并以传统的GET =方式检查参数到页面?我真的想保留它。我知道我可以完全取消它而只是操纵后端,但我不愿意。

谢谢!

1 个答案:

答案 0 :(得分:0)

提交我自己的解决方案以帮助他人。不知道是否有办法通过laravel来做到这一点。因此,我为表单本身创建了一个事件监听器,一个点击(不是提交监听器或它循环)。

提交我的提交按钮并形成一个ID:

<form action="/s" method="get">
    <input type="text" name="location" placeholder="Where" required>
    <input type="text" id="checkin" placeholder="Check in" class="datepicker" required>
    <input type="text" id="checkout" placeholder="Check out" class="datepicker" required>
    <input type="submit" id="submit-button" value="search now">
</form>

然后是听众:

$('#submit-button').click(function(e){
    e.preventDefault();
    var location = $('[name="location"]').val();
    //Console log to see it, and re-write it as necessary
    console.log(location);
    //Action attribute is changed to suit, and then it submits properly
    $('#form-id').attr('action', "/s/" + location).submit();
});

现在有效:)