Post参数通过一个表单,根据所述参数创建一个URL
Post parameters through a form, to create a URL based on said parameters
在一个表单中,用户可以在 2 个下拉列表(例如城市和城镇)中进行搜索和 select。他们提交表单后,我希望将其重定向到 URL,并在 URL.
中选择下拉选项
因此,在提交表单后,他们将被重定向到 www.domain.co.uk/city/town.
我正在努力掌握 URL 参数的概念,以及如何将它们传递给路由!
当前设置:
{!! Form::open(['route' => ['search'], 'method' => 'POST', 'id' => 'search']) !!}
我要 post 到 URL 的两个字段是:
<input type="hidden" name="town" id="town">
和
{!! Form::select('city', $city, null,
['class' => 'form-control', 'id' => 'city', 'required'])
!!}
我知道我必须 post 后者的 ID,所以我必须查找数据库中的实际 name
字段和 return 使用它(无论如何我都必须生成 slug)。
路线:
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 中使用这两个字段的值?我想我的做法是错误的,但我想不出替代方案。
非常感谢任何帮助!提前谢谢你。
如果您希望您的数据在 url 中可用,您的 Route
应该用于 get
请求。不是 post
.
Route::get('{city}/{town}', 'Controller@search');
然后,在您的控制器中,您只需将它们添加到参数列表中即可获取它们:
public function search($city, $town)
我们采用另一种方法并在没有表格的情况下使用 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>
请注意,input/select 元素仍然可以使用 Form Facade
创建
您可以将路由结构更改为:
Route::post('search', 'Controller@search')->name('search');
Route::get('{city}/{town}', 'Controller@show')->name('location.show');
在你的控制器中:
public function show(Request $request, $city, $town) {
// Do something with $city & $town
return view('location.show');
}
public function search(Request $request) {
$input = $request->only('city', 'town');
// TODO: validate the input
return redirect()->route('location.show', $input);
}
在一个表单中,用户可以在 2 个下拉列表(例如城市和城镇)中进行搜索和 select。他们提交表单后,我希望将其重定向到 URL,并在 URL.
中选择下拉选项因此,在提交表单后,他们将被重定向到 www.domain.co.uk/city/town.
我正在努力掌握 URL 参数的概念,以及如何将它们传递给路由!
当前设置:
{!! Form::open(['route' => ['search'], 'method' => 'POST', 'id' => 'search']) !!}
我要 post 到 URL 的两个字段是:
<input type="hidden" name="town" id="town">
和
{!! Form::select('city', $city, null,
['class' => 'form-control', 'id' => 'city', 'required'])
!!}
我知道我必须 post 后者的 ID,所以我必须查找数据库中的实际 name
字段和 return 使用它(无论如何我都必须生成 slug)。
路线:
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 中使用这两个字段的值?我想我的做法是错误的,但我想不出替代方案。
非常感谢任何帮助!提前谢谢你。
如果您希望您的数据在 url 中可用,您的 Route
应该用于 get
请求。不是 post
.
Route::get('{city}/{town}', 'Controller@search');
然后,在您的控制器中,您只需将它们添加到参数列表中即可获取它们:
public function search($city, $town)
我们采用另一种方法并在没有表格的情况下使用 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>
请注意,input/select 元素仍然可以使用 Form Facade
创建您可以将路由结构更改为:
Route::post('search', 'Controller@search')->name('search');
Route::get('{city}/{town}', 'Controller@show')->name('location.show');
在你的控制器中:
public function show(Request $request, $city, $town) {
// Do something with $city & $town
return view('location.show');
}
public function search(Request $request) {
$input = $request->only('city', 'town');
// TODO: validate the input
return redirect()->route('location.show', $input);
}