📜  laravel 路由参数 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:38.439000             🧑  作者: Mango

Laravel 路由参数

在 Laravel 中,路由可以接受参数来满足不同的需求。在本文中,我们将介绍 Laravel 路由参数的常见用法。

基础路由参数

在 Laravel 路由中,用 () 括起来的字符串被视为参数。下面是一个简单的例子:

Route::get('/users/{id}', function ($id) {
    return 'User '.$id;
});

在此示例中,我们创建了一个 /users/{id} 路由。当用户在浏览器中请求该路由时,Laravel 将调用该路由处理程序并将 {id} 参数传递给它。

注意,花括号 {} 之间的名称将被视为参数的名称。在该处理程序中,我们将这个参数称为 $id。这个名称完全是自由的,可以随意命名。

可选路由参数

在一些情况下,您可能希望从 URL 中省略可选参数。在 Laravel 中,我们只需要在参数名后面添加 ? 来实现这一点。

Route::get('/users/{id}/{name?}', function ($id, $name = null) {
    return $name ? 'User '.$id.': '.$name : 'User '.$id;
});

在这个例子中,我们定义了一个可选参数 {name}。如果请求 URL 中包含该参数,则将其传递给处理程序。否则,我们将使用默认值 null

注意,可选参数必须在路由参数中的最后一个位置。

正则表达式约束

有时候,我们可能需要对路由参数进行更严格的约束。在 Laravel 中,我们可以使用正则表达式来实现这一点。

Route::get('/users/{id}/{name}', function ($id, $name) {
    return 'User '.$id.': '.$name;
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

在这个例子中,我们使用 where 方法来设置正则表达式约束。具体来说,我们要求 {id} 参数只能是数字,而 {name} 参数只能是小写字母。

Laravel 默认支持以下几种正则表达式约束:

  • alpha: 仅匹配大小写字母。
  • alpha_num: 仅匹配大小写字母和数字。
  • alpha_dash: 匹配大小写字母、数字和破折号。
  • numeric: 仅匹配数字。
  • regex:pattern: 使用自定义正则表达式进行匹配。
命名路由参数

在 Laravel 中,我们可以给路由命名。这将使我们能够在代码中引用这些路由,而不必在多个文件中寻找它们。

Route::get('/users/{id}/{name}', function ($id, $name) {
    return 'User '.$id.': '.$name;
})->name('user.profile');

在这个例子中,我们为路由设置了一个名称 user.profile。接下来,我们可以在代码中引用这个路由,如下所示:

$url = route('user.profile', ['id' => 1, 'name' => 'john']);

在这个例子中,我们可以通过 route 函数来生成一个 URL,它将自动替换路由中的参数。

结尾语

在本文中,我们介绍了 Laravel 路由参数的基础知识,并介绍了一些高级技巧,例如可选参数和正则表达式约束。请记住,路由参数是 Laravel 强大而灵活的工具之一,可以帮助您构建出色的 Web 应用程序。