首页 > 解决方案 > 将多个可选参数传递给路由

问题描述

我正在为我的 axios 请求准备后端。正面是这样的

handleSearchSubmit(column, value, dateFrom, dateTo) {
            axios
            .get(`api/analyses/get_requested_analysis/${column}/${value}/${dateFrom}/${dateTo}`, {
                column,
                value,
                dateFrom,
                dateTo
            })
            .then(response => {
                console.log(response)
            })
        },

因此,用户将选择一个字段(列)(我的数据库中的一行)和一个值供我搜索。有时用户会输入一个字符串,或者有时是日期。

路线如下所示:

Route::get('/analyses/get_requested_analysis/{column}/{value?}/{dateFrom?}/{dateTo?}', 'Api\AnalyseController@get_requested_analysis')

我现在遇到的问题是,如果用户想按我最终得到的日期进行搜索

/analyses/get_requested_analysis/Date//2021-09-29/2021-10-08 404 (Not Found)

有两个 // 因为该值不存在。

知道如何解决这个问题吗?或者如何对我的参数进行分组,这样 Route 就不会那么“奇怪”?类似于 '/get_requested_analysis' 的参数在控制器中而不是在路由 url 中。

我正在使用 Laravel 5.5,我很迷茫,因为我从未学习过 php

谢谢

标签: phplaravel

解决方案


我认为使用路线中的所有内容效率不高,您应该只使用常规 get params :

/analyses/get_requested_analysis/{column}?value=foo,from=2021-10-08,to=2021-10-09

如果您想在日期格式上添加额外的验证,您可以在您的控制器中执行此操作:

$this->validate($request, [
    'from' => 'date_format:Y-m-d',
    'to' => 'date_format:Y-m-d'
]);

这样您就可以确定在 url 中传递的值是所需的格式


推荐阅读