在 Laravel 10 中,假设我的
web.php
文件中有这条路线:
Route::get('/whatever',function(){
return response()->json([
'message' => 'hello from whatever route'
]);
})->name('whatever');
现在我想从路线
/
重定向到路线/whatever
,我可以使用3条语句来达到相同的结果
Route::get('/', function () {
return redirect('whatever'); //works
return redirect()->route('whatever'); //works
return to_route('whatever') //works
});
那么它们之间有什么区别呢?
由于 URL 地址与路由名称相匹配,您的问题变得复杂。因此,我将用一个新的例子来说明这三个函数之间的区别。
Route::get('/path/to/whatever', function() {
// ...
})->name('example-whatever-name');
redirect()
帮手redirect()
是 Laravel 中执行重定向的“助手”。有多种方法可以将用户重定向到新 URL。如果您向重定向函数提供第一个参数,则不必指定路由名称,而是提供准确的 URL 地址。
return redirect('/path/to/whatever');
redirect()
,Redirect
类的解释如果
redirect()
函数没有提供任何参数,则返回Redirect
类的实例,在该实例中可以调用各种函数。此类函数的示例包括“动作”、“路线”等。您对 route()
函数感兴趣。
对于这个
route()
功能,您不需要提供URL地址,而是需要传递路由名称作为参数,它会根据路由名称重定向到相应的路由。
return redirect()->route('example-whatever-name');
to_route()
辅助函数从 Laravel 9.x 开始,框架中引入了
to_route()
全局函数。这只不过是 redirect()->route()
的更短替代方案。在大多数情况下,使用路由名称进行重定向比使用 URL 地址更好且更具可读性。因此,每次重定向都输入 redirect()->route()
是一种浪费。通过其缩写版本,您的代码会变得更短,并且可能更具可读性。
return to_route('example-whatever-name'); // an alternative to "redirect()->route()"