【发布时间】: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