使用Stripe订阅示例报Dotenv::create()类型错误求助
解决PHP Dotenv::create()参数类型不匹配的致命错误
错误原因
你遇到的是phpdotenv版本兼容性问题:Stripe订阅示例代码基于phpdotenv v3/v4版本编写,但你当前安装的是v5+版本。v5+版本的Dotenv::create()方法参数要求已变更,不再接受字符串路径(如__DIR__),而是必须传入Dotenv\Repository\RepositoryInterface实例,因此触发类型错误。
解决方案
方法1:降级phpdotenv到兼容版本
- 打开项目
server目录下的composer.json文件,找到vlucas/phpdotenv依赖项,将版本修改为^4.0:"vlucas/phpdotenv": "^4.0" - 在项目根目录执行Composer更新命令:
执行完成后,原示例代码即可正常运行。composer update vlucas/phpdotenv
方法2:修改代码适配phpdotenv v5+版本
直接调整index.php中的Dotenv初始化代码,替换为v5+版本支持的写法:
use Slim\Http\Request; use Slim\Http\Response; use Stripe\Stripe; require 'vendor/autoload.php'; // 替换原create方法调用为以下写法之一 // 写法1:快速兼容(无需额外引入类) $dotenv = Dotenv\Dotenv::createUnsafeImmutable(__DIR__); // 写法2:标准仓库实例写法(更规范) // use Dotenv\Repository\RepositoryBuilder; // $repository = RepositoryBuilder::createWithDefaultAdapters()->make(); // $dotenv = Dotenv\Dotenv::create($repository, __DIR__); // 记得加载.env文件(示例代码中可能遗漏,需补充) $dotenv->load();
内容的提问来源于stack exchange,提问作者olevacho
相关产品推荐
相关产品推荐

