带破折号的可选路线

Optional routes with dashes

我想像这样创建 3 条不同的路线:

Route::get('schedule',['as'=>'schedule.view','uses'=>'ScheduleController@view']);
Route::get('schedule/{year}-{month}',['as'=>'schedule.view','uses'=>'ScheduleController@view'])
    ->where('year','\d{4}')
    ->where('month','0[1-9]|1[0-2]');

Route::get('schedule/{year}-{month}-{day}',['as'=>'schedule.view','uses'=>'ScheduleController@view'])
    ->where('year','\d{4}')
    ->where('month','0[1-9]|1[0-2]')
    ->where('day','0[1-9]|[12][0-9]|3[01]');

即,您可以提供以下之一:

当我使用 route('schedule.view', ['2015','01','01]) 向它们 link 时,路由按原样工作,但如果我省略参数,它会尝试 linking 到 /schedule/{year}-{month}-{day} (用大括号实际上就在那里!)。

有没有办法让 laravel 表现得更聪明,还是我必须为每条路线取一个不同的名称?

这绝对不可能,因为route() 是从按名称索引的数组中读取它们的。 每个名称一条路线。所以看起来只有最后一条路线会在该数组中,其他路线会被覆盖。

returns the route的功能除了:

return isset($this->nameList[$name]) ? $this->nameList[$name] : null;

所以换一个名字似乎是可行的方法。