Laravel路由参数

本文概述

  • 必要参数
  • 可选参数
  • 正则表达式约束
  • 全球约束
我们可以使用两种类型的参数:
  • 必要参数
  • 可选参数
Laravel路由参数

文章图片
必要参数 必需的参数是我们在URL中传递的参数。有时你想要捕获URI的某些段, 然后可以通过将参数传递到URL来完成。例如, 你要从URL捕获用户ID。
让我们看一下没有路由参数的示例。
< ?phpRoute::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路由参数】其中控制器参数是路由参数。
输出量
Laravel路由参数

文章图片
让我们看一下具有多个路由参数的示例。
//We can also pass the multiple parameters.Route::get('/post/{id}/{name}', function($id, $name){return "id number is : ". $id ." ".$name; });

输出量
Laravel路由参数

文章图片
可选参数 假设你偶尔需要指定route参数, 为了实现此目的, 可以将route参数设为可选。要使route参数为可选, 可以放置’ ?’ 参数名称后面的运算符。如果要提供可选参数, 然后确保你还为变量提供了默认值。
让我们通过一些例子来理解。
范例1:
Route::get('user/{name?}', function ($name=null) {return $name; });

当我们不向URL传递任何变量时, 输出将是:
Laravel路由参数

文章图片
当我们在URL中传递“ akshita”时, 输出将是:
Laravel路由参数

文章图片
从上面的输出中, 我们观察到我们在URL中传递的参数是可选的。由于我们为参数提供了默认值Null, 所以如果我们不传递任何参数, 它将返回null。如果我们在U??RL中传递参数, 则将显示参数的值。
范例2:
Route::get('user/{name?}', function ($name = 'himani') {return $name; });

在上面的示例中, 我们提供了默认值“ himani”。
输出量
Laravel路由参数

文章图片
在上面的示例中, 我们不传递任何参数, 因此返回默认值。
Laravel路由参数

文章图片
正则表达式约束 这些是可以通过在路由实例上使用where方法来格式化路由参数的约束。 “ where”方法接受参数名称和正则表达式约束, 该约束定义了应如何约束参数。
让我们通过一些例子来理解。
范例1:
假设我们要将用户名作为仅包含字母字符的路由参数传递。
Route::get('user/{name?}', function ($name=null) {return $name; })-> where('name', '[a-zA-Z]+');

Laravel路由参数

文章图片
范例2:
让我们考虑一个仅接受数字值的示例。
Route::get('user/{id?}', function ($id=null) {return "id is : ". $id; }-> where('id', '[0-9]+');

Laravel路由参数

文章图片
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路由参数

文章图片
全球约束 你始终希望路由参数受正则表达式约束;那么你可以使用模式方法。你可以在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时, 输出将是:
Laravel路由参数

文章图片
当我们将route参数传递到“ / post” URL时, 输出将是:
Laravel路由参数

文章图片

    推荐阅读