簡體   English   中英

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

[英]How can I use a Laravel closure to call a controller's __invoke() method?

在我的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_DEBUGtrue 其他錯誤消息在我搞砸的地方呈現。 這是否會導致某種邏輯錯誤?

它只是一個類,所以$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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM