Php 如何使用Laravel闭包调用控制器';调用()方法?
在我的Laravel应用程序中,我创建了一个名为InvokableController的控制器。它包含以下功能:Php 如何使用Laravel闭包调用控制器';调用()方法?,php,laravel,Php,Laravel,在我的Laravel应用程序中,我创建了一个名为InvokableController的控制器。它包含以下功能: public function __invoke() { return view('home'); } 我希望能够调用_invoke方法,如下所示: Route::get('/', function () { $invokableObj = new InvokableController(); $invokableObj(); })->name('ho
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();
我在分配$invokableObj
的行中尝试了在InvokableController
后面加括号和不加括号,但没有成功
我没有收到任何错误消息。我尝试在闭包的底部返回其他内容,如数字1,它在浏览器中呈现1,因此我知道我们已经完成了前面的代码行
APP\u DEBUG
为true
。在我出错的地方会显示其他错误消息。这会导致某种类型的逻辑错误吗?这只是一个类,所以$invokableObj->\uu 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');
谢谢你,提姆。不幸的是,
$invokableObj->\uu invoke()
也不会呈现视图,而且它仍然不会向我提供错误消息。我将尝试DI并返回给您。您应该从路由中的回调函数返回它。DI也不起作用。唯一可行的方法是根本不使用闭包,比如Route::get('/','InvokableController')
。更新了我的答案。试试看。从回调函数返回它就成功了!我猜如果不在闭包中返回返回,就无法从控制器返回视图。