【问题标题】:Laravel (ver 6) php artisan route:list return "Target class does not exist" error with production environment (worked fine in local environment)Laravel (ver 6) php artisan route:list 在生产环境中返回“目标类不存在”错误(在本地环境中工作正常)
【发布时间】:2020-01-24 02:01:28
【问题描述】:

我将 laravel 6 用于 BE,将 vuejs 用于 FE。在我的本地环境(建立在 xampp 服务器上),一切都很好。但是,当我将应用程序部署到服务器(使用 ubuntu 18.04 的 Lamp 服务器)时,当我尝试运行“php artisan route:list”时出现以下错误。

Illuminate\Contracts\Container\BindingResolutionException : 目标类 [App\Http\Controllers\Masterdata\CountryController] 不存在。

在 /var/www/html/performance.goautobot.chat/public_html/performance/vendor/laravel/framework/src/Illuminate/Container/Container.php:806

        try {
             $reflector = new ReflectionClass($concrete);
       } catch (ReflectionException $e) {
         throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
       }

有些 API 无法正常工作。奇怪的部分是“角色”和“国家/地区”都具有与以下完全相同的结构,但是当我尝试使用 Postman 时,只有与“角色”相关的 api 工作时出现“BindingResolutionException”错误。

Route::group(['middleware' => 'auth:api'], function () {    
  // Countries     
  Route::get('masterdata/countries', 'Masterdata\CountryController@index');      
  // Roles    
  Route::get('masterdata/roles', 'Masterdata\RoleController@index');     
}

我试图通过运行诸如“composer dump-autoload”和“php artisan config:cache”之类的命令来解决它,但它并没有解决问题。另外,尝试删除项目文件夹并进行新的安装和部署。

请告诉我如何解决此问题。非常感谢您。

【问题讨论】:

  • 另一个明显的检查步骤,您可能忽略了,文件中的类和命名空间声明是否与文件路径匹配?可能是您在该位置有一个文件,但它包含错误的类(例如拼写错误的名称)。
  • 请检查文件夹的名称,更重要的是,在该控制器文件的开头设置命名空间
  • @fubar,非常感谢您的回答。两个控制器(角色和国家都在相同的命名空间“命名空间 App\Http\Controllers\Masterdata;”下,我检查了每个控制器和类的所有拼写。它们是正确的,并且在我的本地工作正常。
  • 你检查过文件权限是644吗?
  • @fubar,我检查了文件权限,它已经正确了。谢谢

标签: php vue.js production-environment laravel-6


【解决方案1】:

我在使用 HomeController 时遇到了类似的问题,然后我检查了 web.php 文件中的路由, 我发现是这样的

Route::get('/', 'HomeController@index');

然后我根据Homecontoller所在目录改成如下

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

之后,它工作正常。

所以请检查你的控制器目录,

如果您的控制器目录是“App\Http\Controllers\Masterdata\CountryController”,则将其添加到路由中。它会像以下

Route::get('/', 'App\Http\Controllers\Masterdata\CountryController');

我试着根据我的场景来解释, 如果这有帮助,请告诉我,如果我有什么问题,请原谅我

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2015-01-30
    • 2020-12-18
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多