这是我的控制器:

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

当前回答

我试了所有的方法,都没用,直到我第二次尝试 重新启动服务器

php artisan cache:clear
php artisan optimize

php artisan route:list

其他回答

Laravel 8更新了RouteServiceProvider,它用字符串语法影响路由。你可以像之前的答案一样改变它,但推荐的方法是使用动作语法,而不是使用字符串语法的路由:

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

应改为:

Route::get('register', [RegisterController::class, 'register']);

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

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

现在我的项目正在工作。

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

所以我改变了

使用App\Http\controllers\HomeController;

:

使用App\Http\Controllers\HomeController;

在新安装的Laravel 8中,在App/Providers/RouteServices.php文件中:

 /*
 * The path to the "home" route for your application.
 *
 * This is used by Laravel authentication to redirect users after login.
 *
 * @var string
 */
public const HOME = '/home';

/**
 * The controller namespace for the application.
 *
 * When present, controller route declarations will automatically be prefixed with this namespace.
 *
 * @var string|null
 */
 // protected $namespace = 'App\\Http\\Controllers';

取消注释行

protected $namespace = 'App\\Http\\Controllers';

这应该能帮你用传统的方式管理拉拉维尔。

如果你从Laravel的低版本升级到8版本,那么你可能不得不隐式地添加line

protected $namespace = 'App\\Http\\Controllers';

在RouteServices.php文件中,让它以旧的方式运行。

在Laravel 9中,不需要在RouteServiceProvider中添加命名空间。

而不是

Route::resource('tickets', 'TicketController');

use

Route::resource('tickets', TicketController::class);