【问题标题】:Receiving parameters by URL loads all the content通过 URL 接收参数加载所有内容
【发布时间】:2021-01-09 09:39:48
【问题描述】:

我有一个项目显示两个日期之间的订单

路线:

Route::get('/order/manage/all/{date1?}{date2?}', [\App\Http\Controllers\OrderController::class, 'all'])->name('order.manage.all');

查看:

    <form method="GET" action="{{route('order.manage.all')}}" id="buscador">
        <div class="row">
            <div class="form-group col">
                <label for="date1" class="col-md-4 col-form-label">Fecha1</label>

                <input type="date" class="mb-2"name="date1"/>
            </div>  

            <div class="form-group col">
                <label for="date2" class="col-md-4 col-form-label">Fecha2</label>
                <input type="date" class="mb-2" name="date2"/>
            </div>  

            <div class="form-group col">
                <input class="btn btn-primary" type="submit" value="Filtrar"/>
            </div>   
        </div>

    </form>

    @foreach($orders as $order)
    <div class="card mb-5 line">
        <h3 class="text-center">{{"Fecha de pedido: ".$order->date_order." | "."Referencia: ".$order->reference}} </h3>
        <h3 class="text-center">{{$order->address->name." ".$order->address->surname1." ".$order->address->surname2}}</h3>
        <h3 class="text-center">{{$order->address->address." (".$order->address->region.", ".$order->address->city.")"}}</h3>

        <p class="text-center">{{\OrderItemHelper::countOrderItems($order->id)}} productos</p>
    </div>

    @endforeach

控制器:

public function all($date1 = null, $date2 = null) {
        var_dump($date1);
        var_dump($date2);
        if (!empty($date1) && !empty($date2)) {
            $orders = Order::whereBetween('date_order', [$date1, $date2])->get();
        } else {
            $orders = Order::orderBy('date_order', 'desc')->get();
        }
        return view('order.all', [
            'orders' => $orders
        ]);
    }

我遇到的问题是,当我通过 URL 接收这些参数时(在执行 $date1 的 var_dump 时,它会加载我 URL 的所有内容。并且 $date2 返回 null)

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您实际上并没有在这里使用路由参数。您正在使用来自查询字符串的请求输入。路由参数来自 URI(不包括查询字符串)。

    通过您正在执行的操作,您将从路由定义中删除参数并从请求中获取日期。

    Route::get('/order/manage/all', [\App\Http\Controllers\OrderController::class, 'all'])->name('order.manage.all');
    
    public function all(Request $request)
    {
        $date1 = $request->input('date1');
        $date2 = $request->input('date2');
    
    
        ...
    }
    

    不过,看起来您可能有一个错误配置的服务器来配合这个,因为查询字符串可能在没有“?”的情况下传递。并且它最终成为路径的一部分 [基于您的数据转储]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多