如果参数不是整数,如何以不同的方式定义路由?
路由参数在花括号内可用,给定的名称包含字母数字字符。除了字母数字,您还可以在选择路由参数名称时使用下划线。
语法
路由参数的语法如下所示 -
Route::get('/user/{myid}', function ($myid) {
//
});
此处 myid 是我们要进一步使用的路由参数。
多个路由参数
您可以拥有多个路由参数,如以下语法所示 -
Route::get('/students/{post}/feedbacks/{feedback}', function ($postId, $feedbackId) {
//
});
在上述情况下,有两个路由参数:{post} 和 {feedback
可选参数
您还可以为路由设置可选参数。可选参数并非始终可用,参数后用 ? 表示。可选参数的语法如下所示 −
Route::get('/students/{myname?}', function ($myname = null) {
return $myname;
});
路由参数验证
要确保路由参数不是整数,您可以使用定义的路由中的 where() 方法进行验证。
使用 where()
where() 方法将输入作为参数名称,并且定义如何路由参数名称的规则必须是。
示例 1
使用正则表达式检查路由参数,该正则表达式将接受 A-z 或 a-z 之间的任何值。
Route::get('/student/{studentname}', function ($studentname) { // })->where('studentname', '[A-Za-z]+');
输出
上述案例的输出如下。如果您使用学生姓名点击 URL,如 URL 中所示:http://localhost:8000/student/niya,它将返回名称"niya",如以下输出所示

现在让我们在名称中添加一些数字并查看输出 -

当我们将 niya123 添加到 URL 时,我们收到 404 错误。这是因为我们已经定义了一个正则表达式,它只接受大写或小写字符。
例如,路由参数名称混合了大写和小写 -

让我们使用 where 测试另一个包含多个参数的示例。
示例
考虑以下包含名称和 ID 的路由 -
Route::get('/student/{studentid}/{studentname}', function ($studentid, $studentname) { return $studentid."===".$studentname; })->where(['studentid' => '[0-9]+', 'studentname' => '[a-z]+']);
在上述路由中,我们将 studentid 和 studentname 作为路由参数。studentid 的规则是采用所有整数值,studentname 则采用所有小写字母。
让我们在浏览器中测试一下,看看有效的 URL 和无效的 URL。 URL 的输出:http://localhost:8000/student/123/niya 将是 -
123 === niya
输出
URL 的输出:"http://localhost:8000/student/123/NIYA"

由于 studentname 参数有一个规则,即只允许使用小写字母,因此如果名称中有大写字母,它将给出 404。
使用 whereAlpha()
除了 where() 方法之外,您还可以使用whereAlpha() 。whereAlpha() 方法仅接受字符(大写/小写)。
让我们测试其中的一个例子。
Route::get('/student/{studentname}', function ($studentname) { return $studentname; })->whereAlpha('studentname');
上述情况的有效 URL 为:http://localhost:8000/student/Niya
上述情况的无效 URL 为:http://localhost:8000/student/Niya123
使用 whereAlphaNumeric()
Laravel 确实提供了另一种名为 whereAlphaNumeric() 的方法,您可以在其中使用字符和数字。
它的一个例子是
Route::get('/student/{studentname}', function ($studentname) { return $studentname; })->whereAlphaNumeric('studentname');
上述情况的有效 URL 为:http://localhost:8000/student/Niya123
上述情况的无效 URL 为:http://localhost:8000/student/Niya@#123

