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

Laravel9添加带PDF打印的详情页无法获取单条记录求助

问题分析与修正方案

你的问题出在路由参数未定义、控制器参数逻辑冲突、视图变量名不匹配三个核心点,以下是分文件的修正代码:

1. web.php(路由修正)

原路由未接收学生ID参数,导致无法传递记录标识到控制器。修改为支持路由模型绑定的路由,直接注入Student实例:

// 修正后:接收student参数,自动绑定对应实例
Route::get('/generate_pdf/{student}', [StudentController::class, 'generate_pdf'])->name('generate_pdf');

// 原有正常代码保留
Route::resource('ddd',  StudentController::class)->parameters([
    'ddd' => 'student'
]);

2. Controller(控制器方法修正)

原方法同时注入Student $student和$id逻辑冗余,且传递给视图的变量名与视图不匹配。修正后直接使用路由模型绑定的实例,统一变量名:

public function generate_pdf(Student $student)
{
    $date = new Carbon();        
    // 传递$student变量,与pdf视图中的变量名保持一致
    $pdf = PDF::loadView('pdf', compact('student'));     

    return $pdf->download('student-'.$student->id.'-download.pdf');
}

// 原有show方法保留
public function show(Student $student)
{
    return view('show', compact('student'));
}

3. mypage.blade.php(链接修正)

直接传递学生实例即可,路由模型绑定会自动提取ID:

<a href="{{ route('generate_pdf', $row) }}" class="btn btn-primary btn-sm">
print PDF</a>

4. pdf.blade.php(视图验证)

确认视图变量名与控制器传递的一致(此处为$student),原有代码无需修改:

<h1>PDF PRINT </h1>

Name :    {{ $student->student_name }}

Email:    {{ $student->student_email }}

关键修正点说明

  • 路由必须定义{student}参数,才能接收并传递学生记录标识
  • 利用Laravel路由模型绑定,直接注入Student $student,无需手动查询数据库
  • 控制器传递给视图的变量名必须与视图中使用的完全一致,避免变量未定义错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:07