Laravel 路由参数

Laravel 路由参数

有两种类型的参数可以使用:

  • 必需参数
  • 可选参数

Laravel 路由参数

必需参数

必需参数是我们在URL中传递的参数。有时候您想要获取URI的一些片段,可以通过将参数传递给URL来实现。例如,您想要从URL中获取用户ID。

让我们来看一个没有路由参数的示例。

<?php
Route::get('/', function()
{
  return "This is a home page"; 
}
);
Route::get('/about', function()
{
  return "This is a about us page"; 
}
);
Route::get('/contact', function()
{
  return "This is a contact us page"; 
}
);

输出

当我们输入URL “localhost/laravelproject/public/”。

Laravel 路由参数

当我们输入URL”localhost/laravelproject/public/about”时。

Laravel 路由参数

当我们输入URL “localhost/laravelproject/public/contact”。

Laravel 路由参数

让我们来看一下带有路由参数的示例。

Route::get('/post/{id}', function(id)
{
  return "id number is : ".id; 
}
);

路由参数用{}括号括起来,参数必须包含字母字符。不应包含’-‘字符,可以用’_’字符代替。

路由参数在路由回调中可用。路由参数的语法如下:

回调/控制器参数的名称

控制器参数即为路由参数。

输出

Laravel 路由参数

看一个具有多个路由参数的例子。

//We can also pass the multiple parameters.

Route::get('/post/{id}/{name}', function(id,name)
{
  return "id number is : ". id ." ".name; 
}
);

输出

Laravel 路由参数

可选参数

假设您偶尔想要指定路由参数,为了实现这一目的,您可以使路由参数变为可选。要使路由参数可选,可以在参数名称后面放置’?’运算符。如果您想要提供可选参数,那么请确保您也提供了变量的默认值。

让我们通过一些示例来理解。

示例1:

Route::get('user/{name?}', function (name=null) {
    returnname;
});

当我们不将任何变量传递给URL时,输出结果如下:

Laravel 路由参数

当我们在URL中传递’ akshita ‘时,输出将如下:

Laravel 路由参数

从上面的输出中可以看出,我们在URL中传递的参数是可选的。由于我们将参数的默认值设置为Null,所以如果不传递任何参数,则返回null。如果在URL中传递参数,则会显示参数的值。

示例2:

Route::get('user/{name?}', function (name = 'himani') {
    returnname;
});

在上面的示例中,我们将默认值设置为 ‘himani’。

输出结果

Laravel 路由参数

在上面的例子中,我们没有传递任何参数,所以返回默认值。

Laravel 路由参数

正则表达式约束

这些是可以通过在路由实例上使用where方法来对路由参数进行格式化的约束。’where’方法接受参数名称和定义参数限制的正则表达式约束。

让我们通过一些示例来理解。

示例1:

假设我们想将用户名作为路由参数传递,该用户名只包含字母字符。

Route::get('user/{name?}', function (name=null) {
    returnname;
})->where('name','[a-zA-Z]+');

Laravel 路由参数

示例2:

让我们考虑一个只接受数字值的例子。

Route::get('user/{id?}', function (id=null) {
    return "id is : ".id;
}->where('id','[0-9]+');

Laravel 路由参数

示例3:

让我们考虑一个接受字母数字字符的例子。

Route::get('user/{id}/{name}', function (id,name) {
    return "id is : ". id ." ,".  "Name is : ".name ;
})->where(['id'=>'[0-9]+', 'name'=>'[a-zA-Z]+']);

Laravel 路由参数

全局约束

您总是希望通过正则表达式来约束路由参数;然后您可以使用pattern方法。您可以在您的RouteServiceProvider的boot方法中定义这些模式。

当我们有多个路由,并且应用相同的约束条件时,我们使用全局约束。在全局约束中,我们不需要使用where子句逐个对每个路由应用约束条件,只需在boot()方法中定义模式,它将应用于所有路由。

让我们通过一个示例来理解这个概念。

第1步:在RouteServiceProvider.php文件的boot方法中添加模式。

public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}

第二步:在web.php文件中添加路由。

Route::get('user/{id}', function (id) {
 returnid;
});
Route::get('post/{id}', function (id) {
 returnid;
});

输出

当我们在’/user’ URL中传递路由参数时,输出将为:

Laravel 路由参数

当我们将路径参数传递给’/post’ URL时,输出将如下所示:

Laravel 路由参数

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程