Forms Laravel 5.4获取表单时如何排除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&

我用GET方法构建表单,但当我提交表单空字段也传递到url时,我可以排除传递到url的空字段吗

例如>当我提交我的表单url更改为:

?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, '', '&amp;'); // only for use &amp 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)