Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Laravel闭包调用控制器';调用()方法?_Php_Laravel - Fatal编程技术网

Php 如何使用Laravel闭包调用控制器';调用()方法?

Php 如何使用Laravel闭包调用控制器';调用()方法?,php,laravel,Php,Laravel,在我的Laravel应用程序中,我创建了一个名为InvokableController的控制器。它包含以下功能: public function __invoke() { return view('home'); } 我希望能够调用_invoke方法,如下所示: Route::get('/', function () { $invokableObj = new InvokableController(); $invokableObj(); })->name('ho

在我的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();
我在分配
$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')
。更新了我的答案。试试看。从回调函数返回它就成功了!我猜如果不在闭包中返回返回,就无法从控制器返回视图。