Laravel глубокая маршрутизация с несколькими дополнительными значениями - PullRequest
0 голосов
/ 04 июля 2018

Я ищу лучший способ подойти к этому.

У меня есть форма для простого поиска, но есть несколько необязательных значений. Затем контроллер перенаправляет сообщение на URL, который легче читать.

, например

startdate=2018-01-01
enddate=2018-01-31
department=2,4

это создаст URL

/2018-01-01/2018-01-31/2,4/

Но если они также проводят поиск по сотруднику, он возвращает следующее

employee=9,5,1
/2018-01-01/2018-01-31/2,4/9,5,1/

Они также не могли искать отдел и просто искать сотрудников

/2018-01-01/2018-01-31/???/9,5,1/

Итак, имея ввиду, что полный план маршрутизации URL показан ниже, как бы вы использовали вложенные необязательные атрибуты? Кроме того, как вы потом получите эти значения в маршруте?

Route::get('/{locale}/WIPReport/show/{startdate}/{enddate}/{regions?}/{offices?}/{departments?}/{clients?}/{employees?}', 'WIPReportController@reportdata')
    ->where(['regions' => '[0-9,]+', 'offices' => '[0-9,]+', 'departments' => '[0-9,]+', 'clients' => '[0-9,]+', 'employees' => '[0-9,]+'])

1 Ответ

0 голосов
/ 04 июля 2018

Можно использовать несколько необязательных параметров маршрута, но если вы не укажете /null, /none, /0 и т. Д., Вы обязательно столкнетесь с проблемами. Возьмите этот URL и маршрут, например:

Route::get("{primary?}/{secondary?}/{tertiary?}", ExampleController@handleColours);

public function handleColours($primary = null, $secondary = null, $tertiary = null){
  // Handle URL
}

"mysite.com/red/blue/green"

В вышесказанном все работает нормально, так как все 3 определены. Отбрасывание green также подойдет, так как $tertiary по умолчанию будет null. Далее, учитывая этот маршрут:

"mysite.com/red/green"

Если бы вы хотели, чтобы green был третичным, и ожидали результатов, основанных на этом, вы столкнулись бы с вопросом, что $secondary не будет определен в URL, поэтому $secondary будет green, а не null. Если вы измените URL на

"mysite.com/red/null/green"
// OR
"mysite.com/red/none/green"
// OR
"mysite.com/red/0/green"

Тогда все будет вести себя как ожидалось (учитывая немного дополнительной логики для перевода строки "null" или "none" в null), но URL может стать немного нечетким. Другой вариант будет использовать строку запроса для явно определенных параметров:

"mysite.com?primary=red&tertiary=green"

Так что есть варианты для обработки несколькими способами; иди с тем, что работает лучше для тебя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...