我们可以传递控制器可选的方法参数吗

Can we pass method parameter of controller optional

我正在使用 Laravel,但我有一个问题 运行。

基本上,我们像这样创建一个控制器方法:

public function index(User $user)
{
    if(!empty($user)){ ... }
    ...
}

我们通过将 $user 作为参数传递给此方法来调用此方法。

但是是否可以调用参数optional。我的意思是,如果 $user 没有通过,该方法仍然有效。

那么,为了做到这一点,我们是否必须创建两个网络路由?因为默认情况下,当我们传递参数时,我们也必须在路由 uri 中定义它:

Route::get("/{user}", "HomeController@index");
Route::get("/", "HomeController@index");

那么如何在 Laravel 中做到这一点?可不可以?

非常感谢你们的任何想法或建议...

谢谢。

您可以将方法参数设为可选,是的。这是一个 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 获取当前用户

如果这意味着加载当前用户:您可以使用 Auth 在每个控制器中加载当前用户。如果这样更适合您,则无需明确将用户作为参数传递:

$user = Auth::user();

Laravel docs: Authentication