我使用GET方法构建表单但是当我提交表单空字段也传递给url时,我可以将空字段排除在传递给url之外吗?
例如>当我提交我的表格时,网址改为:
?jobTitle=Title&jobCompany=CompanyName&jobGovernorate=&jobLocation=&postingDate=ad
在这个示例中,jobGovernorate和jobLocation为空,所以我希望表单在我提交表单时跳过这些。
如果有办法获得这样的网址
?jobTitle=Title&jobCompany=CompanyName&postingDate=ad
因为jobGovernorate和jobLocation为空
抱歉英文不好,谢谢。
答案 0 :(得分:1)
假设您有以下表格
<form>
<input type="text" class="url_params" name="jobTitle" value="">
<input type="text" class="url_params" name="jobCompany" value="">
<input type="text" class="url_params" name="jobGovernorate" value="">
<input type="text" class="url_params" name="jobLocation" value="">
<input type="text" class="url_params" name="postingDate" value="">
<input type="submit" name="submit" id="submit">
</form>
<script type="text/javascript">
$(document).ready(function () {
$("#submit").on("click", function(e) {
e.preventDefault();
var url = '{{ url('/') }}?';
var total = $(".url_params").length;
$(".url_params").each(function (index) {
if ($(this).val().trim().length) {
if (index === total - 1) {
url += $(this).attr('name') + '=' + $(this).val();
} else {
url += $(this).attr('name') + '=' + $(this).val() + "&";
}
}
});
window.location.href = url;
});
});
</script>
上面的代码将根据字段值生成一个URL并重定向到url。因此它不会生成带有空字段值键的url。
并且具有空字段值不应该有所不同,因为您可以使用 $request->input('key')
检查控制器中的网址值
希望这有帮助!
答案 1 :(得分:1)
Go through array like this, you will just check if your array has empty, will not add the key.
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data) . "\n";
//echo http_build_query($data, '', '&'); // only for use & instead & if needed
答案 2 :(得分:0)
您可以使用中间件解决问题
class StripEmptyParams
{
public function handle($request, Closure $next)
{
$query = request()->query();
$querycount = count($query);
foreach ($query as $key => $value) {
if ($value == '') {
unset($query[$key]);
}
}
if ($querycount > count($query)) {
$path = url()->current() . (!empty($query) ? '/?' . http_build_query($query) : '');
return redirect()->to($path);
}
return $next($request);
}
}
然后调用下面的代码之类的特定路线
Route::get('/search','YourController@search')->middleware(StripEmptyParams::class);