【问题标题】:Passing variable from DOMPDF controller to view从 DOMPDF 控制器传递变量到视图
【发布时间】:2017-05-14 13:12:45
【问题描述】:

我想用 laravel 创建一个 DOMPDF,我必须将我的变量传递给查看。我一直在尝试像下面这样传递变量,但它仍然无法正常工作。

这是我的 Laravel 控制器

 public function pdf(Request $request, $id){
    $salesorder = $this->show($id)->salesorder;
    $detailservice = $this->show($id)->detailservice;
    $detailemployee = $this->show($id)->detailemployee;

    $data = [$salesorder, $detailemployee, $detailservice];

    $pdf = PDF::loadView('summary.invoice', $data);
    return $pdf->download('invoice.pdf');
}

我认为的错误是:

未定义变量:salesorder

如何将变量从 Laravel 控制器传递到 DOMPDF ?

PS : dd($data) 结果是正确的

【问题讨论】:

    标签: laravel dompdf


    【解决方案1】:

    您可以使用库函数轻松做到这一点。

    $pdf_text = "It will be the text you want to load";
    PDF::loadHTML($pdf_text)->save('public/you-file-name.pdf');
    

    您可以更改方向和纸张大小,以及隐藏或显示错误(默认情况下,调试打开时会显示错误)

    PDF::loadHTML($pdf_text)->setPaper('a4', 'landscape')->setWarnings(false)->save('public/you-file-name.pdf')
    

    【讨论】:

      【解决方案2】:

      我知道这很旧,但这可能对其他人有所帮助。您需要在视图中使用数组键。

      控制器:

      $data = [
           'foo'    => $bar,
      ];
      
      $pdf = PDF::loadView('pdf.document', $data);
      return $pdf->stream('doc.pdf');
      

      查看:

      <p>{{$foo}}</p>
      

      【讨论】:

        【解决方案3】:

        你可以试试这个

        public function pdf(Request $request, $id){
            $salesorder = $this->show($id)->salesorder;
            $detailservice = $this->show($id)->detailservice;
            $detailemployee = $this->show($id)->detailemployee;
        
            $pdf = PDF::loadView('summary.invoice', array('salesorder' => $salesorder,'detailemployee'=>$detailemployee,'detailservice'=>$detailservice));
            return $pdf->download('invoice.pdf');
        }
        

        【讨论】:

          【解决方案4】:

          您可以尝试以下方法。

          $html = view('summary.invoice', ['salesorder' => $salesorder, 'detailemployee' => $detailemployee, 'detailservice' => $detailservice])->render();
          $pdf = App::make('dompdf.wrapper');
          $invPDF = $pdf->loadHTML($html);
          return $pdf->download('invoice.pdf');
          

          【讨论】:

            【解决方案5】:

            你必须通过data如下

            $data = [
                'salesorder'     => $salesorder,
                'detailemployee' => $detailemployee,
                'detailservice'  => $detailservice
            ];
            

            或尝试使用compact

            $data = compact('salesorder', 'detailemployee', 'detailservice');
            

            【讨论】:

            • 嗨,它还没有工作。当我使用compact 时,错误仍然相同,但是当我使用您的第一种方式时,页面需要很长时间才能加载。
            • @rafitio 我从 compact 中删除了 []。已编辑答案,请重试。是另一种方式加载吗?或者它需要很长时间并且也没有加载
            • @rafitio 我可以缓慢建议的一件事是,将$this-&gt;show($id) 代码的返回值存储在一个变量中,并使用该变量分配其他值。这样该函数将只执行一次而不是三次
            • 是的,错误还是一样。但现在它一直在工作,我是在我的控制器上手动编写我的 html。感谢您的帮助
            猜你喜欢
            • 2012-02-10
            • 2014-12-08
            • 2015-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多