我正在使用 Laravel,但我有一个问题在想。
基本上,我们创建一个像这样的控制器方法:
public function index(User $user)
{
if(!empty($user)){ ... }
...
}
我们通过将 $user
作为参数传递给此方法来调用此方法。
但是是否可以调用可选参数。我的意思是如果 $user
没有通过,该方法仍然有效。
所以为了做到这一点,我们是否必须创建两个网络路由?因为默认情况下,当我们传递参数时,我们也必须在路由 uri 中定义它:
Route::get("/{user}", "HomeController@index");
Route::get("/", "HomeController@index");
那么如何在 Laravel 中做到这一点呢?有可能吗?
我真的很感激你们的任何想法或建议......
谢谢。
答案 0 :(得分:0)
您可以将方法参数设为可选,是的。这是一个 PHP 特性:
PHP - default function/method parameters
所以在你的代码中:
public function index(User $user = null)
{
if(!empty($user)){ ... }
...
}
您似乎想在两种情况下都调用 HomeController@index
,这不是误导吗?如果您访问 /1,它将加载 ID 为 1 的用户并显示主页。那可能是什么用例?
正如 John Lobo 所建议的,路线最好是 /user/{user}
以消除这种歧义。
顺便说一句:使用身份验证获取当前用户
如果这是为了加载当前用户:您可以使用 Auth
在每个控制器中加载当前用户。如果这对您更有效,则无需将用户作为参数显式传递:
$user = Auth::user();