Laravel9表单提交报错:$port需?int类型却传入string
问题分析与解决方案
错误根源
你遇到的TypeError和提供的FormController代码完全无关,问题出在生产环境的邮件配置上:
错误提示明确指出,Symfony Mailer的Dsn构造函数要求端口参数是可空整数类型,但生产环境传入的是字符串。本地正常是因为本地的SMTP端口配置是整数,而生产环境的端口被解析成了字符串。
排查修复步骤
- 检查.env文件:打开生产环境的
.env,确认MAIL_PORT是纯数字,不要加引号。比如正确写法是MAIL_PORT=587,错误写法是MAIL_PORT="587"(带引号会被解析成字符串)。 - 检查config/mail.php:如果直接在配置文件里写死了端口,确保它是整数类型,比如
'port' => env('MAIL_PORT', 587),不要转成字符串。 - 清除配置缓存:生产环境改完配置后,必须执行以下命令刷新缓存:
php artisan config:clear php artisan config:cache
为什么你的代码没问题
FormController只是调用Laravel的Mail类发送邮件,没有修改邮件传输的底层配置逻辑,所以不可能触发这个类型错误。核心问题就是生产环境的SMTP端口配置类型不匹配,导致Symfony Mailer无法正确处理。
内容的提问来源于stack exchange,提问作者Matthew Fuller
相关产品推荐
相关产品推荐

