Composer在依赖库生成异常文件夹,导致类无法自动加载怎么办?
问题排查:Composer引入Twilio SDK后类找不到的问题
编辑记录
- 编辑2:已修改问题以反映根本问题。
- 编辑1:异常文件夹似乎是问题根源。在新项目中测试其他包时,所有包(包括依赖项)都出现此问题。

原始问题
通过Composer引入Twilio SDK,项目为老旧无框架项目,仅手动实现少量规范,使用自定义自动加载器,未配置composer.json的psr-4规则。
项目结构
- api.php - composer.json - composer.lock - vendor - app - models - libraries - controllers - tools - bootstrap.php
代码逻辑
- 入口文件
api.php第一行引入bootstrap:
<?php require_once("app/tools/bootstrap.php");
- bootstrap文件依次引入两个自动加载器(
BASE_DIR变量及自定义自动加载器功能正常):
require_once(BASE_DIR . '/vendor/autoload.php'); require_once(BASE_DIR . '/app/tools/autoload.php');
- 自定义自动加载器
app/tools/autoload.php内容:
<?php spl_autoload_register(function ($className) { $autoload_folders = ["controllers", "models", "libraries"]; $filename = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php'; foreach ($autoload_folders as $folder) { $path = BASE_DIR . "/app/$folder/$filename"; if (is_file($path)) { require_once($path); break; } } });
报错情况
引入自动加载器后调用$twilio = new \Twilio\Rest\Client($sid, $token);,触发报错:Uncaught Error: Class 'Twilio\Rest\Client' not found。已确认vendor/autoload.php被正确引入(在该文件中输出内容可在应用中正常显示)。
安装流程
composer require twilio/sdk composer update 在bootstrap文件中添加require_once('/vendor/autoload.php')
已尝试的无效方法
- 执行
composer dump-autoload(含优化和不含优化参数,因是全新安装本不应需要此操作); - 将Composer自动加载器的引入移至
api.php第一行,直接调用require_once('vendor/autoload.php'); - 将Twilio实例化代码紧跟在自动加载器引入语句之后执行;
唯一可行但不愿采用的方法:直接引入Twilio自带的自动加载器vendor/twilio/sdk/<weird-twilio-folder-name>/src/autoload.php。
本人有多年Laravel及Composer使用经验,此功能之前正常工作,现突然失效,求排查思路。
参考composer.json
{ "require": { "twilio/sdk": "^7.16" } }
内容的提问来源于stack exchange,提问作者Rustozce
相关产品推荐
相关产品推荐

