Laravel中Mail::raw()闭包参数过少报错问题咨询
解决Laravel Mail::raw()的参数不匹配错误
嘿,这个问题我太熟了!咱们先拆解一下报错的根源,再给你彻底搞定它~
首先,你遇到的这个类型错误,核心原因是Mail::raw()方法的闭包回调规则:Laravel默认只会给这个闭包传递一个参数——也就是邮件消息实例$message,但你在闭包的参数列表里写了function($message, $request),要求必须传入两个参数,系统只传了一个,自然就触发了"Too few arguments"的报错。
正确的修复代码
你不需要把$request作为闭包的参数,而是用PHP的use关键字,把外部的$request变量引入到闭包的作用域里就行。修复后的完整代码如下:
public function contact(Request $request) { Mail::raw($request->message, function($message) use ($request) { $message->from($request->email, $request->name); $message->to('info@test.com'); }); return view('quotation.index'); }
为啥替换成邮箱字符串就不报错了?
当你把$request->email换成硬编码的邮箱字符串时,闭包里不再依赖$request变量,这时候不管你有没有修改闭包参数(哪怕你没改,但不用$request就不会触发参数校验问题),参数数量和系统传递的就匹配了,所以报错自然消失。但这只是临时的权宜之计,上面用use引入变量的方式才是符合Laravel规范的正确写法。
内容的提问来源于stack exchange,提问作者Anna Jeanine
相关产品推荐
相关产品推荐

