Angular+Laravel表单提交报错:数组转字符串转换失败
问题解决:Laravel邮件中数组转字符串错误
错误原因
你遇到的 Array to string conversion 错误,核心原因是:前端传递的services是数组类型,但在Blade邮件模板中直接用{{ $services }}输出时,Blade的双大括号语法会自动尝试将变量转为字符串,数组无法直接转为字符串,因此触发报错。
解决方案
以下两种方法任选其一即可解决问题:
方法1:在邮件类中将数组转为字符串
修改Quotation.php的build方法,用implode()把数组转为逗号分隔的字符串后再传递给模板:
public function build(Request $request) { // 将服务数组转为逗号分隔的字符串 $servicesText = implode(', ', $request->services); return $this->markdown('emails.angular')->with([ 'name' => $request->name, 'email' => $request->email, 'phone' => $request->phone, 'message' => $request->message, 'services' => $servicesText ]); }
方法2:在邮件模板中直接处理数组
保持Quotation.php不变,修改email.blade.php模板,在输出时直接将数组转为字符串:
@component('mail::message') # A New Quotation Received @component('mail::table') | Details: | | | | :------------- |:-------------:| --------------:| | Email | | {{ $email }} | | Name | | {{ $name }} | | Phone | | {{ $phone }} | | Message | | {{ $message }} | | Services | | {{ implode(', ', $services) }} | @endcomponent
如果希望服务列表换行展示,也可以用循环输出:
@component('mail::message') # A New Quotation Received @component('mail::table') | Details: | | | | :------------- |:-------------:| --------------:| | Email | | {{ $email }} | | Name | | {{ $name }} | | Phone | | {{ $phone }} | | Message | | {{ $message }} | | Services | | @foreach($services as $service){{ $service }}<br>@endforeach | @endcomponent
额外修正点
你的Laravel控制器代码中有一处小问题:$request->all应该改为$request->all()(加括号),否则返回的是方法对象而非请求数据:
public function submit(Request $request) { Mail::to($request->email)->send(new Quotation($request)); return response()->json($request->all(), 200); // 修正all为all() }
内容的提问来源于stack exchange,提问作者Muhammad Shahzaib
相关产品推荐
相关产品推荐

