Laravel 5.4如何在GET表单中排除url中的空字段?

时间:2017-03-20 08:48:59

标签: forms laravel url methods get

我使用GET方法构建表单但是当我提交表单空字段也传递给url时,我可以将空字段排除在传递给url之外吗?

例如>当我提交我的表格时,网址改为:

?jobTitle=Title&jobCompany=CompanyName&jobGovernorate=&jobLocation=&postingDate=ad

在这个示例中,jobGovernorate和jobLocation为空,所以我希望表单在我提交表单时跳过这些。

如果有办法获得这样的网址

?jobTitle=Title&jobCompany=CompanyName&postingDate=ad

因为jobGovernorate和jobLocation为空

抱歉英文不好,谢谢。

3 个答案:

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