【问题标题】:Route resource not working in Laravel 8.x路由资源在 Laravel 8.x 中不起作用
【发布时间】:2020-12-29 21:35:53
【问题描述】:

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

目标类 [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);
    });
});

我找不到问题出在哪里。

【问题讨论】:

  • 正如它所说的,没有这样的文件/类。检查你的命名是否正确,命名空间是否正确
  • 我想你只需要把ProfileController::class改成'App\Http\Controllers\Admin\ProfileController'

标签: php routes laravel-8


【解决方案1】:

终于在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');
    });
});

【讨论】:

    【解决方案2】:

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

    php artisan route:clear
    

    【讨论】:

      【解决方案3】:
      Route::resource('invoice','\App\Http\Controllers\InvoiceController');
      

      【讨论】:

        【解决方案4】:

        确保您遵循了升级指南。从 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

        【讨论】:

          【解决方案5】:

          我在使用 Laravel 7 最新版本时也遇到了同样的问题。看看我是怎么解决的:

          首先在页面上包含这个目录
          enter image description here 使用\App\Http\Controllers\Admin\ProfileController

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

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

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

          【讨论】:

          【解决方案6】:

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

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

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

          所以改变

          protected $namespace = null
          

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

          【讨论】:

            【解决方案7】:

            在 Laravel 8 中,首先,您必须像这样导入控制器,

            use App\Http\Controllers\ProfileController;
            

            然后使用资源,

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

            如果你在课堂上使用过,

            Route::resource('profile',[ProfileController::class, 'classname']);
            

            【讨论】:

              【解决方案8】:

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

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

              就我而言,有效的是:

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

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

              【讨论】:

                【解决方案9】:

                请使用下面的代码,看来你是在使用类没有导入所以首先你需要在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);
                    });
                });
                

                【讨论】:

                • 我已经导入了类
                • 当然,你有没有解决方案
                猜你喜欢
                • 2015-08-09
                • 2016-04-20
                • 2016-07-09
                • 1970-01-01
                • 2019-02-20
                • 1970-01-01
                • 2017-02-19
                • 2019-03-04
                • 1970-01-01
                相关资源
                最近更新 更多