Forms Laravel 5.4获取表单时如何排除url中的空字段?
我用GET方法构建表单,但当我提交表单空字段也传递到url时,我可以排除传递到url的空字段吗 例如>当我提交我的表单url更改为:Forms Laravel 5.4获取表单时如何排除url中的空字段?,forms,laravel,url,methods,get,Forms,Laravel,Url,Methods,Get,我用GET方法构建表单,但当我提交表单空字段也传递到url时,我可以排除传递到url的空字段吗 例如>当我提交我的表单url更改为: ?jobTitle=Title&jobCompany=CompanyName&jobGovernorate=&jobLocation=&postingDate=ad 在本例中,JobGovernment和jobLocation为空,因此我希望表单在提交表单时跳过这些内容 如果有办法得到这样的url ?jobTitle=Title&
?jobTitle=Title&jobCompany=CompanyName&jobGovernorate=&jobLocation=&postingDate=ad
在本例中,JobGovernment和jobLocation为空,因此我希望表单在提交表单时跳过这些内容
如果有办法得到这样的url
?jobTitle=Title&jobCompany=CompanyName&postingDate=ad
因为JobGoverniate和jobLocation为空
很抱歉英语不好,谢谢。假设您有如下表格
<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>
$(文档).ready(函数(){
$(“#提交”)。在(“单击”)上,功能(e){
e、 预防默认值();
var url='{url('/')}}}?';
变量总数=$(“.url_参数”).length;
$(“.url_参数”)。每个(函数(索引){
if($(this.val().trim().length){
如果(索引==总计-1){
url+=$(this.attr('name')+'='+$(this.val();
}否则{
url+=$(this.attr('name')+'='+$(this.val()++“&”;
}
}
});
window.location.href=url;
});
});
上面的代码将根据字段值生成URL并重定向到URL。所以它不会生成带有空字段值键的url。
如果字段值为空,则不会产生任何影响,因为您可以使用$request->input('key')
希望这有帮助 您可以使用中间件解决您的问题
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
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);
如果视图中的值为空,则不要传递
jobGoverniate
和jobLocation
。显示前端代码以获得详细解释。但是,最好在控制器中管理这些,因为我猜在某些请求中,您可能正在将值传递给这些参数。为什么不使用jQuery/JavaScript并在表单前的空字段中添加disabled
属性呢submit@ArunCode我已经管理了控制器中的所有字段(若为空),但我认为若url更改为只有字段有值,那个么效果会更好,因为所有字段都在url中,url变长,并没有任何内容例如,如果一个字段有值,url将不会很长,谢谢您的时间。@linktoahref-Mmmm,我认为搜索表单总是使用GET方法提交,我不知道jQuery是否会更好,以及如何做到这一点,我是一个初学者,所以我尝试构建我的第一个php laravel脚本。无论如何谢谢你的帮助(Y)