带破折号的可选路线
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]');
即,您可以提供以下之一:
- 没有year/month/day
- 年月
- 年月日
当我使用 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;
所以换一个名字似乎是可行的方法。
我想像这样创建 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]');
即,您可以提供以下之一:
- 没有year/month/day
- 年月
- 年月日
当我使用 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;
所以换一个名字似乎是可行的方法。