【问题标题】:Laravel not recognizing Controller __invoke()Laravel 无法识别控制器 __invoke()
【发布时间】:2021-04-03 14:07:32
【问题描述】:

尽管浏览了几篇类似的帖子,但无法调试这个简单的路由问题。

TestController 不可调用。控制器类 TestController 是不可调用的。您是否忘记添加 __invoke 方法或者是 您的路由文件中缺少控制器的方法?

我在 Stack 上玩过尽可能多的排列,但没有任何改变。我已经确认了简单的路由,即:

Route::get('/', function () {
    return view('welcome');
});

工作,但我无法让控制器工作。我已经清除了缓存并取消了 $namespace 的注释,没有任何区别。事实上,错误消息似乎没有改变,这让我相信这不是路由,而是与控制器有关。但我是新手,没看到。

来自 web.php:

Route::get('/test', TestController::class);

TestController.php:

<?php

namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    
    class TestController extends Controller {
        public function __invoke() {
            return view('welcome');
        }
    }

【问题讨论】:

  • 将您的代码与文档进行比较我看到您导入但有“使用 Illuminate\Http\Request”(未使用)但没有“使用 App\Http\Controllers\Controller”。我似乎是不必要的,但试试吧。另一种选择是使用工匠命令“php artisan make:controller TestController --invokable”生成该控制器并与您的代码进行比较。
  • composer du之后可以吗?

标签: php laravel routes controller


【解决方案1】:

也许这可以帮助像我一样忽略一个简单问题的人: 我写道:

Route::post('controller/{resource}/action', \App\Http\Controllers\MyController::class, 'action')->name('controller.action');

我需要的是:

Route::post('controller/{resource}/action', [\App\Http\Controllers\MyController::class, 'action'])->name('controller.action');

所以基本上我错过了控制器类和动作参数周围的[],它们一起组成一个数组 - 必须记住这一点。 :)

对不起,如果这只是一点点偏离主题,但我搜索了我的问题并最终出现在这里,因此这也可能对其他人有所帮助。

【讨论】:

    【解决方案2】:

    当您没有控制器的 FQCN 的 use 语句时,通常会发生这种情况。

    在声明路由的路由文件中,确保添加了 Controller 命名空间的 use 语句。特别是从 Laravel 8.x 开始,控制器的默认命名空间不像早期版本那样设置为 App\Http\Controllers

    //routes file
    use App\Http\Controllers\TestController;
    
    Route::get('/test', TestController::class);
    

    如果您使用可调用的控制器类仅返回一个视图,请注意,您可以改用 Route::view() 方法

    //Assuming that you have a resources/views/test.blade.php 
    Route::view('/test', 'test');
    

    【讨论】:

    • 谢谢,添加“使用 App\Http\Controllers\TestController;”在路线页面中修复了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多