可选路线停止其他具有相同模式的路线

时间:2019-05-29 10:26:16

标签: php laravel laravel-5

以下是我定义可选变量的方法,并且我将有一个中间件来处理可选变量。我不确定为什么这会导致无法访问测试页面,并且我认为它将被解释为邀请代码。有什么解决方法?

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 个答案:

答案 0 :(得分:1)

例如,我有这三个路线

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/是我的应用网址

现在,当我按下myCustomRoute时,它实际上并没有击中myCustomRoute,这是因为路由器是myCustomRouteinvite_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');

现在再次尝试在web.php末尾添加{invite_code?}的路由

点击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,结果将是 “此处输入您的代码” “我是邀请代码路线”

并点击http://localhost:8000/myCustomRoute,结果将为“我是我的自定义路线” 并按http://localhost:8000/testing/myinvitecode,结果将为“ myinvitecode” “我正在测试邀请代码路线”