Статические маршруты Side By Side и маршруты Wild Card в Ларавеле - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть сценарий использования веб-сайта Laravel, над которым я работаю, чтобы некоторые статические маршруты находились на том же уровне, что и основной маршрутный символ.

EG:

Маршрут: / магазин / корзина Статический маршрут
Маршрут: / магазин / оформить заказ Статический маршрут
Маршрут: / магазин / * Динамический маршрут
Маршрут: / магазин / / Динамический маршрут
Маршрут: / * Динамический маршрут

Я пытался выяснить, как реализовать эту структуру маршрутизации в Laravel, и хотя правила статической маршрутизации работают нормально, как только я добавляю маршруты с подстановочными знаками, я сталкиваюсь с маршрутом с подстановочными знаками, пытаясь также перехватить статические маршруты.

Как бы я мог добавить правила маршрутизации для поддержки этого?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Нас глобальное ограничение

Route::pattern('all','.*');

Затем определите ваши маршруты в порядке

Route::('store/cart', function () {});
Route::('store/checkout', function () {});
Route::('store', function () {});
Route::('store/{all}', function ($all) {});
Route::('{all}', function ($all) {});
0 голосов
/ 15 сентября 2018

удалось заставить его работать.

Первым шагом было использование глобальных шаблонов маршрутов ограничения для @Aboalnaga ...

Route::pattern('variableName','.*');

Каждая переменная была определена с этим шаблоном маршрута, чтобы сделать его шаблоном подстановочных знаков.

Следующим шагом было обеспечение порядка маршрута. Похоже, что при обработке маршрутов Laravel будет работать по списку маршрутов по порядку. Как только он найдет первый соответствующий маршрут, он остановится и начнет этот маршрут. Таким образом, для обработки цепочки маршрутов в форме domain.com/store/cat-1/product, где запрос может быть для domain.com, domain.com/store, domain.com/store/cat-1, domain.com/store/cat-1/product или domain.com/some-content-page-from-database, маршрут должен быть определен как .. .

Route::get('/store/shopping-cart', 'onlineStore@showCart');
Route::get('/store/checkout', 'onlineStore@showCheckout');
Route::get('/store/checkout/payment', 'onlineStore@showPayment');
Route::get('/store/checkout/success', 'onlineStore@showPaymentSuccess');
Route::get('/store/checkout/error', 'onlineStore@showPaymentError');
Route::get('/store/{category}', 'onlineStore@showCategory');
Route::get('/store/{category}/{product}', 'onlineStore@showProductDetails');
Route::get('{article}', 'articles@showArticle');

Определяя маршруты по порядку и определяя переменный маршрут как последний маршрут на этом уровне, переменный маршрут будет запускаться только в том случае, если предыдущие маршруты не совпадают.

0 голосов
/ 15 сентября 2018

изменить конфликтующие маршруты на не конфликтующие.

Route: /store/cart Static Route => this is ok
Route: /store/checkout Static Route => this is ok
Route: /store/* Dynamic Route => /store/id/{id}
Route: /store// Dynamic Route => /store
Route: /* Dynamic Route => remove this and be specific by having more routes for the needs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...