【问题标题】:Laravel Error - Controller not found, but it is thereLaravel 错误 - 找不到控制器,但它在那里
【发布时间】:2021-07-12 22:42:55
【问题描述】:

Laravel 8

确切地说:

"laravel/framework": "^8.12",

我一直收到这个错误

你们可以看到我的项目中有那个文件。

我还尝试重新启动本地 MAMP 服务器并清除缓存

php artisan view:clear
php artisan route:clear
php artisan cache:clear
php artisan config:clear

我也是

⚡️  mybabies  composer dumpauto                                                                                        
Generating optimized autoload files                                                                                   
> Illuminate\Foundation\ComposerScripts::postAutoloadDump                                                             
> @php artisan package:discover --ansi                                                                                
Discovered Package: facade/ignition                                                                                   
Discovered Package: fideloper/proxy                                                                                   
Discovered Package: fruitcake/laravel-cors                                                                            
Discovered Package: laravel/sail                                                                                      
Discovered Package: laravel/tinker                                                                                    
Discovered Package: nesbot/carbon                                                                                     
Discovered Package: nunomaduro/collision                                                                              
Package manifest generated successfully.                                                                              
Generated optimized autoload files containing 4683 classes 

请让我知道我还能做什么。


路线

Route::get('/', function(){ return Redirect::to('/baby/signin'); }); Route::get('/baby/signin','BabyAccountController@signin');

【问题讨论】:

  • 你能给出这个路由定义吗?
  • Composer dump-autoload 不需要,因为该命名空间已经加载。
  • 你的 laravel 版本是什么?在您的项目目录上运行终端代码 php artisan -V 并转储您的问题。
  • use App\Baby 表明您正在使用 laravel 7。请突出显示您正在使用的版本以获得更好的帮助。

标签: php laravel laravel-8


【解决方案1】:

确保您的 RouteServiceProvider 中有这些:

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

public function boot()
{
    $this->configureRateLimiting();

    $this->routes(function () {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace) // here
            ->group(base_path('routes/api.php'));

        Route::middleware('web')
            ->namespace($this->namespace) // here
            ->group(base_path('routes/web.php'));
    });
}

或者,您可以在 RouteServiceProvider 中注释掉 $namespace 并使用基于闭包的路由定义,如下所示:

use App\Http\Controllers\BabyAccountController;

Route::get('/baby/signin', [BabyAccountController::class, 'signin']);

【讨论】:

  • 谢谢,让我试试。我想知道泰勒是否决定这样做。
  • ->namespace($this->namespace) 已包含在内。
  • 您是否尝试过提交它并使用基于闭包的语法?
【解决方案2】:

我在安装 Laravel 8.27.0 版本时遇到了同样的错误:错误如下:

在 laravel 8 中定义路由的方式是:

use App\Http\Controllers\BabyAccountController;

Route::get('/baby/signin', [BabyAccountController::class, 'signin']);

如果你想坚持旧的方式,那么你需要在 app\Providers\RouteServiceProvider.php 中添加一个命名空间属性并在 routes 方法中激活.

Route::get('/baby/signin','BabyAccountController@signin');

【讨论】:

  • 我宁愿更新提供程序文件,并保持我的路线原样,所以它很干净。
  • 我是从 7 升级到 8 的。
  • @cyber8200 我也宁愿更新提供程序文件。
【解决方案3】:

如果您使用的是 Laravel 8.0 或更高版本,您的 Route 代码应如下所示:

您当前的代码:

Route::get('/baby/signin','BabyAccountController@signin');

应该是:

Route::get('/baby/signin',[BabyAccountController::class, 'signin']);

别忘了在web.php中导入控制器

use App\Http\Controllers\BabyAccountController;

【讨论】:

  • 在新的 laravel 8 上
【解决方案4】:

如下更改您的路线定义:

Route::get('/', function(){ return Redirect::to('/baby/signin'); }); Route::get('/baby/signin','App\Http\Controllers\BabyAccountController@signin');

【讨论】:

    【解决方案5】:

    非常感谢@p-k-tharindu

    将这一行加入

    app/Providers/RouteServiceProvider.php

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

    解决了我的问题。

    注意: 我不需要在boot() 中添加->namespace($this->namespace),因为它已经存在。以防其他人面临这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 2011-07-21
      • 1970-01-01
      • 2014-12-24
      • 2017-04-29
      • 2013-07-29
      • 2021-01-06
      • 1970-01-01
      相关资源
      最近更新 更多