在我的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_DEBUG
是true
。其他错误消息在我搞砸的地方呈现。这会导致某种类型的逻辑错误吗?
答案 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');