如果参数不是整数,如何以不同的方式定义路由?

laravelphpserver side programming更新于 2025/4/29 20:22:17

路由参数在花括号内可用,给定的名称包含字母数字字符。除了字母数字,您还可以在选择路由参数名称时使用下划线。

语法

路由参数的语法如下所示 -

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


相关文章