通过表单发布参数,根据所述参数创建URL

时间:2016-10-20 17:16:38

标签: php laravel laravel-5 routes parameter-passing

在表单中,用户可以在2个下拉列表中搜索和选择(例如,城市和城镇)。提交表单后,我希望将其重定向到包含URL中所选下拉选项的网址。

因此,在提交表格后,他们将被重定向到www.domain.co.uk/city/town。

我很难掌握URL参数的概念,以及如何将它们传递给路线!

当前设置:

{!! Form::open(['route' => ['search'], 'method' => 'POST', 'id' => 'search']) !!}

我要发布到网址的两个字段是:

<input type="hidden" name="town" id="town">

{!! Form::select('city', $city, null, 
    ['class' => 'form-control', 'id' => 'city', 'required']) 
!!}

我知道我必须发布后者的ID,因此我必须在DB中查找实际的name字段并将其返回使用(我必须生成反正)。

路线

Route::post('{city}/{town}', ['uses' => 'Controller@search',
        'city' => Input::get('city'), 'town' => Input::get('town')]
)->name('search');

控制器:

public function search(Request $request)
{
    return view('location.search');
}

如何在重定向时使用URL中的两个字段值?我认为我正以错误的方式接近它,但我想不出其他选择。

任何帮助都会受到大力赞赏!提前谢谢。

3 个答案:

答案 0 :(得分:0)

如果您希望数据在网址中可用,则Route应该是get请求。不是post

Route::get('{city}/{town}', 'Controller@search');

然后,在您的控制器中,只需将它们添加到参数列表中即可获得它们:

public function search($city, $town)

答案 1 :(得分:0)

我们如何采用另一种方法并使用没有表单的javascript。示例如下:

<input type="hidden" name="town" id="town" value="town">

<select name="city" id="city">
    <option value=""></option>
    <option value="City1">City 1</option>
    <option value="City2">City 2</option>
    <option value="City3">City 3</option>
    <option value="City4">City 4</option>
</select>
<button type="button" onclick="redirect()">Redirect</button>
<script>
    function redirect(){
        var city = document.querySelector('#city').value;
        var town = document.querySelector('#town').value;
        if(city != '' && town != ''){
            window.location = 'http://mydomain.co.ke/'+city+'/'+town;
            //or
            window.location = '/'+city+'/'+town;
        }
        else{
            alert('Select a city');
        }
    }
</script>

作为注释,仍然可以使用表格外观

创建输入/选择元素

答案 2 :(得分:0)

您可以将路线结构更改为:

chrome.fileSystem.getWritableEntry(Entry entry, function callback)

在你的控制器中:

Route::post('search', 'Controller@search')->name('search');
Route::get('{city}/{town}', 'Controller@show')->name('location.show');