📜  Laravel路由参数

📅  最后修改于: 2021-01-05 10:33:28             🧑  作者: Mango

Laravel路由参数

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

  • 必要参数
  • 可选参数

必要参数

必需的参数是我们在URL中传递的参数。有时您想要捕获URI的某些段,然后可以通过将参数传递到URL来完成。例如,您要从URL捕获用户ID。

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

输出量

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

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

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

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

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

路径参数包含在{}括号内,并且参数必须包含字母字符。它不应该包含“ – ”字符,而不是使用此字符,你可以使用“_”字符。

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

回调/控制器参数的名称

其中控制器参数是路由参数。

输出量

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

//We can also pass the multiple parameters.

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

输出量

可选参数

假设您要偶尔指定route参数,为了实现此目的,可以将route参数设为可选。要使route参数成为可选参数,可以放置'?'参数名称后面的运算符。如果要提供可选参数,然后确保您还为变量提供了默认值。

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

范例1:

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

当我们不向URL传递任何变量时,输出将是:

当我们在URL中传递“ akshita ”时,输出将是:

从上面的输出中,我们观察到我们在URL中传递的参数是可选的。由于我们为参数提供了默认值Null,因此如果我们不传递任何参数,它将返回null。如果我们在URL中传递参数,则将显示参数的值。

范例2:

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

在上面的示例中,我们提供了默认值“ himani”。

输出量

在上面的示例中,我们不传递任何参数,因此返回默认值。

正则表达式约束

这些约束可以通过在路由实例上使用where方法来格式化路由参数。 “ where”方法接受参数名称和正则表达式约束,该约束定义了应如何约束参数。

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

范例1:

假设我们要传递用户名作为仅包含字母字符的路由参数。

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

范例2:

让我们考虑一个仅接受数字值的示例。

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


范例3:

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

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

全球约束

您始终希望路由参数受正则表达式约束;那么您可以使用模式方法。您可以在RouteServiceProvider的启动方法中定义这些模式。

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

让我们通过一个例子来理解这一点。

步骤1:在RouteServiceProvider.php文件的启动方法中添加模式。

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

步骤2:在web.php文件中添加路由。

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

输出量

当我们将route参数传递到'/ user'URL时,输出将是:

当我们将route参数传递到'/ post'URL时,输出将是: