Laravel 路由:定义包含斜杆(/)的路由参数
例如这样的一个 URL:
我们想让 laravel/scout
这个 URI 分段为参数,可以这样做:
Route::get('packages/{slashName?}', 'PackagesController@show')
->where('slashName', '(.*)');
此时 PackagesController
的 show
方法:
public function show($slashName, Request $request)
{
dd($slashName);
}
会输出:
“laravel/scout”
路由参数
必填参数
单个参数
有时候您需要在路由中捕获一些 URL 片段。例如,从 URL 中捕获用户的 信息,那就这样来定义路由参数:
routes/web.php
Route::get('users/{user}', 'UsersController@show')->name('users.show');
例如这样的一个 URL:
此时 UsersController
的 show
方法:
app/Http/Controllers/UsersController.php
public function show( User $user )
{
return $user;
}
会输出:
{"id":1,"name":"Laravel","email":"laravel@example.com","email_verified_at":null,"created_at":"2021-02-10 21:27:51","updated_at":"2021-02-10 21:27:51"}
如果想要具体数据可以使用对象(->)方式来获取
return $user->name;
会输出:
Laravel
多个参数
也可以根据您的需要在路由中定义多个参数:
routes/web.php
Route::get('posts/{post}/comments/{comment}', function ( $post, $comment ) {
dd("Post: $post", "Comment: $comment");
});
例如这样的一个 URL:
会输出:
Post: xiaoming
Comment: example
可选参数
有时,你可能需要指定一个路由参数,但你希望这个参数是可选的。你可以在参数后面加上 ?
标记来实现,但前提是要确保路由的相应变量有默认值:
routes/web.php
Route::get('user/{name?}', function ($name = 'xiaoming') {
dd($name);
});
例如这样的一个 URL:
会输出
xiaoming
例如这样的一个 URL:
会输出
John
注意:路由的参数通常都会被放在 {}
内,并且参数名只能为字母,而不能包含 - 符号。如果有需要,可以用下划线 _
代替 - 。路由参数会按路由定义的顺序依次注入到路由回调或者控制器中,而不受回调或者控制器的参数名称的影响。
问题解决了,谢谢大佬分享
厉害