使用Fetch API时出现Laravel控制器不存在错误
问题描述
- 路由配置:
Route::get('/biller-info','MyDomain\Http\Controllers\BillPaymentController@getBillerInfo');
- 抛出异常:
Target class [Mydomain\Http\Controllers\BillPaymentController] does not exist。 - 文件路径:
api > packages > mydomain-shop > src > Http > Controllers > BillPaymentController.php - 控制器代码:
<?php namespace MyDomain\Http\Controllers; use Exception; use Illuminate\Http\Request; use MyDomain\Enums\Permission; use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use MyDomain\Exceptions\MyDomainException; use Illuminate\Database\Migrations\Migration; use Illuminate\Support\Facades\Http; class BillPaymentController extends CoreController { public function getBillerInfo() { $response = Http::get('https://reqres.in/api/products/3'); dd($response->collect()); } }
解决步骤
1. 统一命名空间大小写
异常提示的命名空间是Mydomain(首字母小写),但控制器和路由中用的是MyDomain(首字母大写)。Laravel对命名空间大小写敏感,必须保证以下三处完全一致:
- 控制器文件中的
namespace MyDomain\Http\Controllers; - 路由中的
MyDomain\Http\Controllers\BillPaymentController@getBillerInfo - composer自动加载配置中的命名空间映射
2. 配置并更新composer自动加载
在项目根目录的composer.json里,检查autoload区块是否正确映射了包的命名空间:
"autoload": { "psr-4": { "MyDomain\\": "api/packages/mydomain-shop/src/" } }
配置完成后执行命令更新自动加载规则:
composer dump-autoload
3. 验证路径与命名空间对应关系
当前控制器文件路径api/packages/mydomain-shop/src/Http/Controllers/BillPaymentController.php,对应命名空间MyDomain\Http\Controllers是正确的——src目录映射根命名空间MyDomain\,子目录Http/Controllers对应命名空间的子层级。
4. 确认路由文件位置匹配访问地址
如果是API路由,需确保这条路由定义在routes/api.php中。若放在web.php,访问地址无需加/api前缀;若在api.php,访问地址应为127.0.0.1/api/biller-info,需和实际访问路径对应。
5. 检查父类CoreController的存在性
控制器继承了CoreController,需确保该文件存在于api/packages/mydomain-shop/src/Http/Controllers/CoreController.php,且命名空间同样为MyDomain\Http\Controllers。
内容的提问来源于stack exchange,提问作者aman
相关产品推荐
相关产品推荐

