这是我的控制器:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        dd('aa');
    }
}

如截图所示,类存在并且在正确的位置:

我的api.php路由:

Route::get('register', 'Api\RegisterController@register');

当我使用Postman命中我的寄存器路径时,它给了我以下错误:

目标类[Api\RegisterController]不存在。

我该怎么解决呢?


多亏了这些答案,我才得以修复它。我决定对这个路由使用完全限定类名,但是答案中描述了其他选项。

Route::get('register', 'App\Http\Controllers\Api\RegisterController@register');

当前回答

在Laravel 8中,指定路由的方式已经改变:

Route::resource('homes', HomeController::class)->names('home.index');

其他回答

如果你正在使用Laravel 8,只需复制并粘贴我的代码:

use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

是的,在Laravel 8中确实发生了这个错误。 在尝试了许多解决方案后,我得到了这个完美的解决方案。 只要按照步骤做……

案例1

我们可以在api.php和web.php文件中更改如下。 目前我们编写语法的方式是

Route::get('login', 'LoginController@login');

应该改为:

Route::get('login', [LoginController::class, 'login']);

案例2

首先打开这个文件:app > Providers > RouteServiceProvider.php 在该文件中替换该行 Protected $namespace = null;用protected $namespace = '应用程序\Http\控制器'; 然后添加line ->命名空间($this->命名空间)如图…

我在运行php artisan route:list时遇到了同样的错误。在我的情况下,我已经删除了追索权控制器,但路由仍然被定义。我必须确保在routes/web.php中注释掉了有问题的类。

是的,检查路由文件夹中的web.php是否使用了Controller类。

use App\Http\Controllers\<name of controlelr class>

当我传递null到中间件函数时,它发生在我身上:

Route::middleware(null)->group(function () {
    Route::get('/some-path', [SomeController::class, 'search']);
});

为中间件传递[]无效。或者如果不使用中间件,可能只是删除中间件调用:D