带破折号的可选路线

时间:2015-01-05 00:43:31

标签: laravel

我想创建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])链接到这些路线时,路线按原样工作,但是如果我省略了它尝试链接到/schedule/{year}-{month}-{day}的参数(实际上有大括号!)。

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

1 个答案:

答案 0 :(得分:2)

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

returns the route除了:

之外的其他功能
return isset($this->nameList[$name]) ? $this->nameList[$name] : null;

因此,似乎有一个不同的名称。