Необязательный маршрут остановки других маршрутов с тем же шаблоном - PullRequest
0 голосов
/ 29 мая 2019

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

Route::group(['middleware' => ['friend']], function() {

    Route::get('/{invite_code?}', 'IndexController@index')->name('home')->middleware('firsttime'); // 首页

    Route::get('/testing/{invite_code?}', 'IndexController@testing')->name('testing');
});

1 Ответ

1 голос
/ 29 мая 2019

Например, у меня есть эти три маршрута

Route::get('/{invite_code?}', function () {
    dd('i am invite code Route');
})->name('invitecode');
Route::get('/myCustomRoute', function () {
    dd( 'i am myCustomRoute');
});
Route::get('/testing/{invite_code?}', function(){
    dd( 'i am testing invite code Route');
})->name('invitecodetest');

Теперь я обслуживаю свое приложение в 8000 порту, поэтому http://localhost:8000/ - это URL моего приложения

Теперь, когда я нажимаю myCustomRoute, на самом деле это не будет myCustomRoute, потому что Маршрутизатор это то, что myCustomRoute как invite_code нажмите http://localhost:8000/myCustomRoute Таким образом, результат будет Я - код приглашения Маршрут

Как это исправить

Есть два способа

Путь 1 Изменение порядка маршрутов

Route::get('/myCustomRoute', function () {
    dd( 'i am myCustomRoute');
});
Route::get('/testing/{invite_code?}', function(){
    dd( 'i am testing invite code Route');
})->name('invitecodetest');

Route::get('/{invite_code?}', function () {
    dd('i am invite code Route');
})->name('invitecode');

Теперь попробуйте еще раз, чтобы попасть в маршрут. Добавьте {invite_code?} в конце web.php

хит http://localhost:8000/myCustomRoute результат будет я myCustomRoute

Сейчас работает нормально, но есть недостаток

сейчас попробуйте http://localhost:8000/myundefinedroutename

но он пройдет по маршруту {invite_code?}, так что это ошибка

Способ 2: попытаться добавить префикс к маршруту

Route::get('/invidecode/{invite_code?}', function ( $invite_code = null) {
    dd( $invite_code, "i am invite code Route");
})->name('invitecode');
Route::get('/myCustomRoute', function () {
    dd( 'i am myCustomRoute');
});
Route::get('/testing/{invite_code?}', function(){
    dd( 'i am testing invite code Route');
})->name('invitecodetest');

Теперь попробуйте http://localhost:8000/invidecode/yourcodegoeshere Результат будет "yourcodegoeshere" «Я приглашаю код маршрута»

и нажмите http://localhost:8000/myCustomRoute результат будет "я - мой пользовательский маршрут" и нажмите http://localhost:8000/testing/myinvitecode результат будет "myinvitecode" "Я тестирую маршрут приглашения"

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