Php 如果在Laravel中设置了任何操作参数,请采取措施

Php 如果在Laravel中设置了任何操作参数,请采取措施,php,laravel,laravel-5,Php,Laravel,Laravel 5,我对可选参数使用此路线: Route::get('/{place?}/{day?}', 'Weather@fetch_weather'); 如果其中一个参数存在,或者即使没有传递任何参数,我希望控制器执行代码 以下是我试图做的: public function fetch_weather ($place = null, $day = null) { if ($place) { if ($day) { //do something with pro

我对可选参数使用此路线:

Route::get('/{place?}/{day?}', 'Weather@fetch_weather');
如果其中一个参数存在,或者即使没有传递任何参数,我希望控制器执行代码

以下是我试图做的:

public function fetch_weather ($place = null, $day = null) {
    if ($place) {
        if ($day) {
            //do something with provided place and provided 1 specific day
        } else {
            //do something with provided place but with 7 days
        }
    } else {
    if ($day) {
        //do something with automatic place and provided specific day
    } else {
        //do something with automatic place and 7 days
    }
}

现在,如果有人提供一个参数,那么laravel如何知道它是一个地点还是一天。

因此,您有三个选项:

1) 可以创建三种不同的管线:

/place/{place} calls controller@place
/day/{day} calls controller@day
/placeandday/{day}/{place} controller&placeAndDay
每个方法只调用并返回带有适当参数的
fetch\u weather

2) 您可以将地点和日期作为get参数,并使用
$request->get('day')
$request->get('place')

3) 您只能有一条这样的路线:

/weather/{first_arg}/{second_arg?}
您只需检查第二个参数是否为空以及第一个参数的格式:

  • 如果first_arg是一天,second_arg为空:您只有这一天
  • 如果第一个参数不是一天,第二个参数为空:您只有位置
  • 如果first_arg是一天,second_arg不为空:日期为first_arg,位置为second_arg
  • 如果first_arg不是一天,second_arg不是null:则位置为first_arg,日期为second_arg

我认为第三个最接近您想要实现的目标,但需要更多的代码

我很确定这是不可能的,laravel将始终使用第一个route参数,并将其放入第一个function参数中,因此我想我所能做的就是使用一个简单的开关案例来替换值,如果提供的唯一参数看起来像一天?对吗?有两种方法可以做到这一点:你可以把地点和日期作为参数,比如?地点=…&日期=。。。或者你可以放置不同的路径,比如/place/{place}、/day/{day},第三条路径用于地点和日期。对于第一种方法,您只有一个控制器函数。至于第二种方法,您可以使用三种不同的控制器方法来调用执行此任务的主控制器函数。我刚刚考虑过,您还可以检查参数的格式。例如,如果$place是一个日期,那么您知道它是$day而不是$placeGotcha。非常感谢你的回答。非常感谢。