You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8控制器向视图传值及学生成绩邮件发送问题排查

Laravel 8 学生成绩邮件发送问题修复方案

一、控制器代码修正

问题点:

  1. get() 返回的是集合对象,直接在视图中调用 $welcome->classname 会报错(集合无此属性)
  2. 邮箱地址格式错误(gmaile、gmail 后缀不完整)
  3. 未拆分学生信息与成绩数据,导致视图数据调用混乱

修正后代码:

public function test()
{
    // 查询指定学生的所有成绩及关联信息
    $results = DB::table('results')
        ->select('studentinfos_id','marks','subject_code','name','email','rollid','classname','classnumber','image_path')
        ->join('studentinfos','studentinfos.id','=','results.studentinfos_id')
        ->join('subjects','subjects.id','=','results.subjects_id')
        ->join('addclasses','addclasses.id','=','results.addclasses_id')
        ->where('studentinfos.id', 1)
        ->orderBy('subject_code','ASC')
        ->get();

    // 提取学生基础信息(同学生的成绩数据中,学生信息重复,取第一条即可)
    $student = $results->first();

    // 修正邮箱地址格式,使用学生真实邮箱发送
    Mail::to($student->email, $student->name)
        ->cc('leade@gmail.com')
        ->send(new mytestmail($student, $results));

    echo '检查你的收件箱';
}

二、邮件类(mytestmail.php)修正

问题点:

未正确接收控制器传递的变量,导致视图无法获取数据

修正后代码:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class mytestmail extends Mailable
{
    use Queueable, SerializesModels;

    // 定义公开变量,视图可直接访问
    public $student;
    public $results;

    /**
     * 创建邮件实例
     *
     * @return void
     */
    public function __construct($student, $results)
    {
        $this->student = $student;
        $this->results = $results;
    }

    /**
     * 构建邮件内容
     *
     * @return $this
     */
    public function build()
    {
        // 替换为你的视图路径(例如:emails.result)
        return $this->view('emails.test');
    }
}

三、视图文件(view.blade.php)修正

问题点:

  1. 直接调用集合对象的属性($welcome->classname)
  2. 字段名不匹配(查询选的是rollid,视图用enrollment;查询选的是image_path,视图用image)
  3. 拼写错误($studnet应为$student)
  4. 未使用正确的变量名(现在传递的是$student和$results)

修正后代码:

<div class="container">
    <div class="text-center">
        <h1> {{ $student->classname }} 学生成绩报告 </h1>
    </div>

    <div class="border bg-white seespace p-3">
        <div class="row">
            <div class="col-md-8">
                <table class="table table-borderless">
                    <tr>
                        <th>班级</th>
                        <td>{{ $student->classname }} {{ $student->classnumber }}</td>
                    </tr>
                    <tr>
                        <th>姓名</th>
                        <td>: {{ $student->name }}</td>
                    </tr>
                    <tr>
                        <th>邮箱</th>
                        <td>: {{ $student->email }}</td>
                    </tr>
                    <tr>
                        <th>学号</th>
                        <td>: {{ $student->rollid }}</td>
                    </tr>
                </table>
            </div>
            <div class="col-md-4">
                <img class="imgreport center" src="{{ asset('images/' . $student->image_path) }}" alt="学生照片">
            </div>
        </div>

        <nav class="bg-dark text-white-50 mb-5">
            <div class="container">
                <div class="row p-3"></div>
            </div>
        </nav>

        <table class="table text-center table-bordered table-responsive py-3">
            <thead class="thead-info text-center">
                <tr>
                    <th>序号</th>
                    <th>科目代码</th>
                    <th>分数</th>
                </tr>
            </thead>
            <tbody>
                @php
                    $num = 1;
                    $total = 0;
                @endphp
                @foreach($results as $result)
                <tr>
                    <td>{{ $num++ }}</td>
                    <td>{{ $result->subject_code }}</td>
                    <td>{{ $result->marks }}</td>
                </tr>
                @php $total += $result->marks; @endphp
                @endforeach
                <tr>
                    <td></td>
                    <td>总分</td>
                    <td>{{ $total }}</td>
                </tr>
                <tr>
                    <td></td>
                    <td>下载报告</td>
                    <td>
                        <form action="/print" method="get">
                            <input type="hidden" value="{{ $student->id }}" name='id'>
                            <button class="btn btn-info">下载</button>
                        </form>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

额外检查项

  1. 确保邮件配置正确(.env文件中MAIL_MAILER、MAIL_HOST等参数设置完毕)
  2. 确认images目录存在于public文件夹下,且图片文件可访问
  3. 邮件类的命名空间正确(App\Mail),视图文件路径与邮件类中view()方法的参数一致

内容的提问来源于stack exchange,提问作者Johnapp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:55:16