如何从stdClass对象提取信息?Laravel Mailable赋值from属性报错如何解决
错误原因
你自定义的Mailable类继承了Laravel自带的Illuminate\Mail\Mailable基类,基类中已经预先定义了$from属性,该属性的预期数据结构为包含address、name两个键的数组,而非纯字符串。
你直接将数据库取出的邮箱字符串赋值给$this->from后,Laravel内核后续处理发件人逻辑时,会尝试以数组形式读取$this->from['address'],此时就会触发“无法在字符串上访问字符串类型偏移”的报错。
而subject、content属性要么是你在自定义类中自行声明的字符串类型属性,要么基类的对应属性本身就支持字符串直接赋值,因此不会触发错误。
正确实现方式
推荐直接调用Mailable基类自带的from()方法设置发件人,不需要直接操作属性:
// 仅设置发件人邮箱 $this->from($this->data->from); // 若需要设置发件人显示名,传第二个参数即可 $this->from($this->data->from, '你的站点名称');
如果确实需要直接给$from属性赋值,需要按要求传入指定结构的数组:
$this->from = [ 'address' => $this->data->from, 'name' => null // 替换为你需要的发件人显示名即可 ];
内容的提问来源于stack exchange,提问作者Artur Müller Romanov
相关产品推荐
相关产品推荐

