Laravel 8控制器向视图传值及学生成绩邮件发送问题排查
Laravel 8 学生成绩邮件发送问题修复方案
一、控制器代码修正
问题点:
get()返回的是集合对象,直接在视图中调用$welcome->classname会报错(集合无此属性)- 邮箱地址格式错误(
gmaile、gmail后缀不完整) - 未拆分学生信息与成绩数据,导致视图数据调用混乱
修正后代码:
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)修正
问题点:
- 直接调用集合对象的属性(
$welcome->classname) - 字段名不匹配(查询选的是
rollid,视图用enrollment;查询选的是image_path,视图用image) - 拼写错误(
$studnet应为$student) - 未使用正确的变量名(现在传递的是
$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>
额外检查项
- 确保邮件配置正确(
.env文件中MAIL_MAILER、MAIL_HOST等参数设置完毕) - 确认
images目录存在于public文件夹下,且图片文件可访问 - 邮件类的命名空间正确(
App\Mail),视图文件路径与邮件类中view()方法的参数一致
内容的提问来源于stack exchange,提问作者Johnapp
相关产品推荐
相关产品推荐

