如何使用Laravel闭包调用控制器的__invoke()方法?

时间:2019-07-23 07:01:54

标签: php laravel

在我的Laravel应用程序中,我创建了一个名为InvokableController的控制器。它包含以下功能:

public function __invoke()
{
    return view('home');
}

我希望能够这样调用__invoke方法:

Route::get('/', function () {
    $invokableObj = new InvokableController();
    $invokableObj();
})->name('home');

这可行:

Route::get('/', 'InvokableController')->name('home');

这不是我想要的。我想以这种方式调用invoke方法:

$invokableObj = new InvokableController();
$invokableObj();

在分配InvokableController的那一行上,我在$invokableObj之后尝试了带括号,但没有运气。

我没有收到任何错误消息。我尝试在闭包的底部返回其他内容,例如数字1,它在浏览器中呈现1,所以我知道我们已经遍历了前面的代码行。

APP_DEBUGtrue。其他错误消息在我搞砸的地方呈现。这会导致某种类型的逻辑错误吗?

1 个答案:

答案 0 :(得分:2)

它只是一个类,因此$invokableObj->__invoke()应该可以正常工作。或者您可以使用laravel DI:

app()->call(InvokableController::class . '@__invoke');

Route::get('/', function () {
    return app()->call(InvokableController::class . '@__invoke'); 
    // or
    $invokableObj = new InvokableController();
    return $invokableObj->__invoke();
})->name('home');