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

时间:2021-07-20 10:35:06

标签: php laravel laravel-5.8

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

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

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

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

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

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

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

那么如何在 Laravel 中做到这一点呢?有可能吗?

我真的很感激你们的任何想法或建议......

谢谢。

1 个答案:

答案 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();

Laravel docs: Authentication

相关问题