这是我的控制器:

<?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');

当前回答

在我的例子中,我也犯了同样的错误,因为我忘记将路径中控制器的第一个字母大写。

所以我改变了

使用App\Http\controllers\HomeController;

:

使用App\Http\Controllers\HomeController;

其他回答

当我安装Laravel 8.27.0版本时,我得到了同样的错误: 错误如下:

但是当我看到我的app/Providers/RouteServiceProvider.php文件时,我的引导方法中有名称空间。然后我只是取消注释this => protected $namespace = '应用\\Http\\控制器';。

现在我的项目正在工作。

Laravel 8文档实际上比这里的任何答案都更简洁和清楚地回答了这个问题:

路由命名空间更新

在Laravel之前的版本中,RouteServiceProvider包含一个$namespace属性。此属性的值将自动添加到控制器路由定义的前缀,并调用动作助手/ URL::action方法。在Laravel 8。X,此属性默认为空。这意味着Laravel不会自动添加名称空间前缀。因此,在新的Laravel 8。x应用程序,控制器路由定义应该使用标准的PHP可调用语法定义:

use App\Http\Controllers\UserController;

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

对动作相关方法的调用应该使用相同的可调用语法:

action([UserController::class, 'index']);

return Redirect::action([UserController::class, 'index']);

如果你喜欢Laravel 7。x风格的控制器路由前缀,你可以简单地将$namespace属性添加到应用程序的RouteServiceProvider中。

在Laravel 8中定义路径的方法有两种

// Using PHP callable syntax...
use App\Http\Controllers\HomeController;
Route::get('/', [HomeController::class, 'index']);

Or

// Using string syntax...
Route::get('/', 'App\Http\Controllers\HomeController@index');

资源路由变为

// Using PHP callable syntax...
use App\Http\Controllers\HomeController;
Route::resource('/', HomeController::class);

这意味着在Laravel 8中,默认情况下没有任何自动控制器声明前缀。

方法中添加名称空间属性 并在routes方法中激活。

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

也检查你的路由web.php文件,如果你的RegisterController是正确的。

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\RegisterController;


Route::get('/register',[RegisterController::class,'index'])->name('register');
Route::post('/register',[RegisterController::class,'store']);

Route::get('/', function () {
    return view('test.index');
});