проверить тип параметров перед запуском маршрута в laravel 5

У меня на маршруте 2 вида.

нравится:

Вы знаете по этим:

Route::get('/{category_slug}/{article_slug}', 'mController@list');

Route::get('/{category_slug}/{subcategory_slug?}', 'mController@clist');

Он проходит только по первому маршруту.

Я пытаюсь привязать их в RouteServiceProvider boot () {

Route::bind('category_slug', function ($category_slug, $route) {dd('category_slug') }); //works

Route::bind('article_slug', function ($article_slug, $route) { dd('article_slug') }); //works for both article_slug(ok!) and subcategory_slug(wrong!)

Route::bind('subcategory_slug', function ($subcategory_slug, $route) { dd('subcategory_slug') }); //not works 

}

Есть ли способ проверить {article_slug} или {subcategory_slug} перед загрузкой маршрута, а затем система выберет правильный маршрут? например, если первый неверен, пропустите его и попробуйте запустить второй маршрут.

например промежуточное ПО может это сделать?


person Ali    schedule 01.12.2017    source источник
comment
Параметры являются всего лишь заполнителями, и вы не можете использовать их для перенаправления маршрутов на контроллеры. Вы не можете использовать вместо этого другой маршрут?   -  person pseudoanime    schedule 01.12.2017
comment
@pseudoanime Я хочу создать такой URL: example.com/cat/subcat1_slug/subcat2_slug.../subcatN_slug/article_slug ... Я ежечасно ищу в Google и не могу найти решение. Так что я думаю, что, может быть, я смогу сделать верхний путь ...   -  person Ali    schedule 01.12.2017


Ответы (2)


Вам необходимо использовать другой URL-адрес или другой метод запроса, чтобы выполнить ваше требование.

Нравиться -

Route::get('/{category_slug}/{article_slug}', 'mController@list');
Route::post('/{category_slug}/{subcategory_slug?}', 'mController@clist');

Используйте Route::update(), если необходимо изменить данные, которые уже находятся в базе данных, или Request::delete(), чтобы удалить данные в базе данных.

Или, как ответ tprj29, вам нужно использовать разные типы URL-адресов

person Advaith    schedule 01.12.2017

В Laravel ярлыки уникальны для каждой таблицы, а не для всех таблиц. Я бы рекомендовал использовать что-то вроде ключевого слова, чтобы определить, какой пул ожидается. Это намного эффективнее и чище, чем запросы, чтобы определить, относится ли слаг к типу article или category объекта.

Route::get('/{category_slug}/', 'mController@clist');
Route::get('/{category_slug}/sub/{subcategory_slug}', 'mController@clist');
Route::get('/{category_slug}/sub/{subcategory_slug}/{article_slug}', 'mController@list');
Route::get('/{category_slug}/{article_slug}', 'mController@list');
person tprj29    schedule 01.12.2017