2015-01-05 3 views
0

Я хочу создать 3 различных маршрутов, как это:Дополнительные маршруты с черточками

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

Route::get('schedule/{year}-{month}-{day}',['as'=>'schedule.view','uses'=>'[email protected]']) 
    ->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 вести себя умнее или мне нужно дать каждому из моих маршрутов другое имя?

ответ

2

Это определенно невозможно, потому что route() читает их из массива, индексированного по имени. Один маршрут на имя. Таким образом, похоже, что только последний маршрут будет в этом массиве, а остальные будут переопределены.

Функция, returns the route ничего не делает, чем:

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

Так другое имя, кажется, путь.

+0

Hrm. Я полагал, что это должно было произойти с ошибкой, если бы я переопределил название маршрута. Я подумал, может быть, это может быть умно и рассмотреть количество аргументов. Или, может быть, я мог бы переписать маршрут каким-то образом, например 'schedule/{{year} - {month}}? {- {day}}?'. Ну что ж. Это не большое дело, спасибо! – mpen

+0

Похоже, было бы целесообразно генерировать исключение, если несколько маршрутов определены с тем же именем да. Возможно, есть другая функциональность, которая фактически работает с несколькими маршрутами на имя idk. Определение одного маршрута с необязательными параметрами может быть альтернативным решением yep. –