Laravel-如何重用通过函数传递参数的函数

时间:2018-12-25 14:54:40

标签: php laravel

我想进一步了解如何利用此功能的强大功能,使人可以将模型作为已实例化并准备使用的空对象传递。

我面临的问题是可重用性,我不想两次编写函数。

因此,让我们以以下功能为例:

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函数。

谢谢

1 个答案:

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