我想进一步了解如何利用此功能的强大功能,使人可以将模型作为已实例化并准备使用的空对象传递。
我面临的问题是可重用性,我不想两次编写函数。
因此,让我们以以下功能为例:
API
Route::post('/onboarding/email-verification', 'CustomerController@verifyEmail');
控制器
public function verifyEmail(Request $request, Customer $customer) {}
上面的函数仅用于简单目的,它使我可以使用已经从http请求中接收到的Request
实例,在该实例中,我有一个实例化的对象为$request
,可以在其中进行进一步的处理使用。
现在在同一控制器中,我希望使用verifyEmail()
作为$this->verifyEmail()
,但是我不能,因为该函数需要2个参数,所以我尝试重建该函数,如:
$this->verifyEmail(new Request(['email' => $customer->email]), new Customer())
-由于该功能需要电子邮件。我尝试了许多其他迭代,但是即使它们确实起作用,它们看起来也很可怕。
所以我的问题很简单,如何重新使用在其参数中使用模型/对象构建的Laravel函数。
谢谢
答案 0 :(得分:1)
您可以使用第三个参数:
public function verifyEmail(Request $request, Customer $customer, ?string Email)
{
if ($email) {
// use var
} else {
// use request
}
}
您只需注入Request即可使用它,或使$ request参数为可空:
$this->verifyEmail($request, new Customer(), 'youremail@test.com')
如果要保留2个参数,可以定义新的$ request变量,如下所示:
$request = new \Illuminate\Http\Request();
$request->replace(['email' => 'email@totest.com']);
$this->verifyEmail($request, new Customer());