我们可以传递控制器可选的方法参数吗
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,但我有一个问题 运行。
基本上,我们像这样创建一个控制器方法:
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();