5

我对Route::resource()Laravel 8.x 中的方法有疑问。它返回的错误是:

目标类 [Admin\App\Http\Controllers\Admin\ProfileController] 不存在。

在此处输入图像描述

这是我在 routes/web.php 中的代码:

Route::prefix('admin')->namespace('Admin')->group(static function() {

    Route::middleware('auth')->group(static function () {
        //...
        Route::resource('profile', ProfileController::class);
    });
});

我找不到问题出在哪里。

4

9 回答 9

10

最后,我在laravel 8.x upgarade guide中找到了答案。我已经用完整的命名空间向控制器名称发送了短信,而不是导入它。

Route::prefix('admin')->namespace('Admin')->group(static function() {

    Route::middleware('auth')->group(static function () {
        //...
        Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');
    });
});
于 2020-09-15T07:18:25.930 回答
5

运行以下步骤以清除路由缓存

php artisan route:clear
于 2021-01-03T10:49:49.780 回答
4
Route::resource('invoice','\App\Http\Controllers\InvoiceController');
于 2020-11-07T05:11:55.923 回答
3

确保您遵循了升级指南。从 v7 到 v8 发生了很多变化。

App/Providers/RouteServiceProvider.php添加_$namespace

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';
}

您还可以在此处找到更多答案:https ://stackoverflow.com/a/63808132/799176

于 2020-12-27T16:57:29.987 回答
2

Laravel 7 最新版本也遇到了同样的问题。看看我是如何解决的:

首先在页面上包含这个目录在
此处输入图片描述 使用\App\Http\Controllers\Admin\ProfileController

然后像这样调用包含className的完整版路由

Route::resource('profile', '\App\Http\Controllers\Admin\ProfileController');

这将为 ProfileController 类中定义的所有方法自动创建不同的路由。请参阅使用 TodoController 附加的图像中的示例。

于 2020-10-27T07:12:04.637 回答
1

所以这是一个问题的原因是因为 Laravel 8 删除了 RouteServiceProvider 上的默认命名空间。

如果您想使用该ProfileController::class功能,您需要protected $namespace在 RouteProvider 中将 重置为 null 以匹配基本代码。

否则,它会将 $namespace 附加到您传递的任何类。

所以改变

protected $namespace = null

然后->namespace('Admin')从您的 routes.php 文件中删除

于 2020-12-07T21:49:13.553 回答
1

在 Laravel 8 中,首先,您必须导入控制器,例如,

use App\Http\Controllers\ProfileController;

然后使用资源,

Route::resource('profile', 'App\Http\Controllers\ProfileController');

如果你在课堂上使用它,

Route::resource('profile',[ProfileController::class, 'classname']);
于 2021-03-13T10:27:16.400 回答
0

运行php artisan route:list,我遇到了同样的问题。

目标类 [App\Http\Controllers\App\Http\Controllers\CourseController] 不存在。

就我而言,有效的是:

将资源从 : 更改Route::resource('courses', CourseController::class);Route::resource('courses', 'CourseController');

我没有更改任何命名空间,我使用的是 laravel 7.2。

于 2021-12-15T15:13:12.780 回答
-1

请使用下面的代码,您似乎在使用类而不导入所以首先您需要在 web.php 文件中导入 profilecontroller。

use App\Http\Controllers\Admin\ProfileController;      ## insert path profilecontroller 
Route::prefix('admin')->namespace('Admin')->group(static function() {

    Route::middleware('auth')->group(static function () {
        //...
        Route::resource('profile', ProfileController::class);
    });
});
于 2020-09-14T10:48:49.220 回答