Laravel视图转PDF时未定义变量错误解决咨询
解决方法:直接传递数据生成PDF
我来帮你搞定这个问题!你遇到的未定义变量错误,本质是因为调用PDF::loadView时,没有把视图需要的verifications和professor变量传递进去——视图找不到这些变量,自然会报错。
最简洁的解决方案:直接在PDF生成方法里传变量
你完全不用依赖第一个路由,只需要把afficherconfirmer里的数据查询逻辑移到confirmer方法中,然后把变量直接传递给loadView即可,和返回视图的用法一致:
public function confirmer(){ // 1. 获取需要的数据 $professor = Auth::user(); $exams = $professor->exams; $verifications = Verification::with('exam') ->whereIn('exam_id', $exams->pluck('id')) ->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->get(); // 2. 把变量传递给视图,生成PDF $pdf = PDF::loadView('confirmations.confirmer', compact('verifications','professor')); // 3. 下载PDF return $pdf->download('confirmation_changement_notes.pdf'); }
这样修改后,你可以直接访问/confirmer路由生成PDF,完全跳过第一个展示视图的路由,同时视图能正确获取到所需的所有变量,不会再出现未定义错误。
关于你提出的View::composer方案
这个方案是可行的,因为View::composer会在视图被加载时自动注入指定的变量。但对于这种只在单个方法中使用的场景,直接传递变量的方式更简洁,代码可读性更高,没必要引入视图 composer。
如果你的confirmations.confirmer视图需要在多个地方复用,且每次都需要相同的变量,那使用视图 composer 才是更合适的选择。
额外建议
如果不再需要展示视图的功能,可以直接删除第一个路由Route::get('/confirmation','VerificationsController@afficherconfirmer');,避免冗余代码。
内容的提问来源于stack exchange,提问作者Mehdi El Aissi
相关产品推荐
相关产品推荐

