【问题标题】:Wrong View create PDF laravel错误的视图创建 PDF laravel
【发布时间】:2018-10-23 09:44:37
【问题描述】:

点击一个按钮,我想要一个 PDF。但我没有得到 PDF,我只是从数据库中获取数据。

我的代码是:

<?php

namespace MVS\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use PDF;
use MVS\Kunden;

class DynamicPDFController extends Controller
{
    function index()
    {
     $customer_data = $this->get_customer_data();
     $finance_data = $this->get_finance_data();
     return view('dynamic_pdf')->with('customer_data', $customer_data);
    }

    function get_customer_data($id)
    {
     $customer_data = Kunden::find($id);
     return $customer_data;
    }

    function pdf()
    {
     $pdf = \App::make('dompdf.wrapper');
     $pdf->loadHTML($this->convert_customer_data_to_html());
     return $pdf->stream();
    }

    function convert_customer_data_to_html()
    {
     $customer_data = $this->get_customer_data();
     $output = '
     <h3 align="center">Angebot</h3>
     <table width="100%" style="border-collapse: collapse; border: 0px;">
      <tr>
    <th style="border: 1px solid; padding:12px;" width="20%">Vorname</th>
    <th style="border: 1px solid; padding:12px;" width="30%">Nachname</th>
    <th style="border: 1px solid; padding:12px;" width="15%">Stadt</th>
    <th style="border: 1px solid; padding:12px;" width="15%">PLZ</th>
   </tr>
     ';  
     foreach($customer_data as $kunden)
     {
      $output .= '
      <tr>
       <td style="border: 1px solid; padding:12px;">'.$kunden->vorname.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->nachname.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->wohnort.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->plz.'</td>
      </tr>
      ';
     }
     $output .= '</table>';
     return $output;
    }
}

我刚刚得到以下消息输出:

{"id":1,"created_at":"2018-10-15 06:56:15","updated_at":"2018-10-15 06:56:15","user_id":2, "vorname":"Patrick","nachname":"Marks","strasse":"teststraße 9","plz":47906,"wohnort":"Krefeld","mail":"p-dierig@sdsd. de","telefon":21514462,"geburtsdatum":"2013-10-30"}

路线如下:

Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@get_customer_data');

当我在控制器中使用此代码时:

function index()
    {
     $customer_data = $this->get_customer_data();
     return view('dynamic_pdf')->with('customer_data', $customer_data);
    }

    function get_customer_data()
    {
     $customer_data = DB::table('kundens')
         ->limit(10)
         ->get();
     return $customer_data;
    }

我将获得一份包含所有客户的 PDF。但我只想从特定用户那里获得数据...

【问题讨论】:

  • 您似乎在单击按钮时调用 index 方法。你能检查一下是否调用了正确的控制器方法吗?
  • 我添加了路线。也许有帮助?
  • 您调用了错误的控制器操作。 @get_customer_data 只从数据库中获取客户并返回模型。您必须调用@pdf 操作。
  • 我更新了帖子

标签: php laravel laravel-5


【解决方案1】:

如果您将 GET 方法发布到

Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@get_customer_data');

然后你会在你的DynamicPDFController中点击function get_customer_data(){}

这命中了这段代码:

$customer_data = DB::table('kundens')
         ->limit(10)
         ->get();
return $customer_data;

所以你只会得到客户数据。

尝试改变这个:

Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@get_customer_data');

到这里:

Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@index');

现在尝试将您的 get_customer_data 更改为:

function get_customer_data()
    {
     $customer_data = DB::table('kundens')->first();
     return $customer_data;
 }

这应该只给您一个客户。 现在我们必须让它动态化,这样你就可以传递一个 ID 或类似的函数:

function get_customer_data($id)
    {
     $customer_data = DB::table('kundens')->whereId($id)->first();
     return $customer_data;
    }

记得改变你的索引函数:

function index()
    {
     $id = 1;
     $customer_data = $this->get_customer_data($id);
     return view('dynamic_pdf')->with('customer_data', $customer_data);
    }

现在相应地编辑您的索引,以便您可以将 ID 传递给索引函数以进行动态设置。

【讨论】:

  • 这是最好的解决方案。我需要将 $kunden->vorname 更改为 $kunden['vorname'] 但是现在我有下一个错误: Undefined property: Symfony\Component\HttpFoundation\ResponseHeaderBag::$vorname (View: C:\xampp\htdocs\mvs \mvs\resources\views\dynamic_pdf.blade.php)
【解决方案2】:

因为你的代码调用用户信息检查这条路线:

Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@get_customer_data');

在这条路线中,您在 DynamicPDFController 类中调用 get_customer_data() 函数。

如果我们看那里:

$customer_data = Kunden::find($id);
     return $customer_data;

这些代码响应 json 。

你可以像这样替换函数:

function get_customer_data($id)
    {
     $customer_data = Kunden::find($id);


     return $this->pdf($customer_data);
    }

    function pdf($customer_data)
    {
     $pdf = \App::make('dompdf.wrapper');
     $pdf->loadHTML($this->convert_customer_data_to_html($customer_data));
     return $pdf->stream();
    }

    function convert_customer_data_to_html($customer_data)
    {

     $output = '
     <h3 align="center">Angebot</h3>
     <table width="100%" style="border-collapse: collapse; border: 0px;">
      <tr>
    <th style="border: 1px solid; padding:12px;" width="20%">Vorname</th>
    <th style="border: 1px solid; padding:12px;" width="30%">Nachname</th>
    <th style="border: 1px solid; padding:12px;" width="15%">Stadt</th>
    <th style="border: 1px solid; padding:12px;" width="15%">PLZ</th>
   </tr>
     ';  
     foreach($customer_data as $kunden)
     {
      $output .= '
      <tr>
       <td style="border: 1px solid; padding:12px;">'.$kunden->vorname.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->nachname.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->wohnort.'</td>
       <td style="border: 1px solid; padding:12px;">'.$kunden->plz.'</td>
      </tr>
      ';
     }
     $output .= '</table>';
     return $output;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多