При нажатии кнопки я хочу 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":"[email protected]","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-файл со ВСЕМИ клиентами в таблице. Но мне нужны данные только от конкретного пользователя ...
Я добавил маршрут. Может это поможет?
Вы вызываете неправильное действие контроллера. @get_customer_data получает только клиента из базы данных и возвращает модель. Вы должны вызвать действие @pdf.
Я обновил пост






Поскольку ваши коды вызовов информации пользователей проверяют этот маршрут:
Route :: get ('/ admin / kunden / pdf / {id}', 'DynamicPDFController @ get_customer_data');
в этом маршруте вы вызываете функцию get_customer_data () в классе DynamicPDFController.
если мы посмотрим на там:
$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;
}
Если вы публикуете метод GET на
Route::get('/admin/kunden/pdf/{id}', 'DynamicPDFController@get_customer_data');
Затем вы попадете в function get_customer_data(){} в своем DynamicPDFController.
Это попадает в этот код:
$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;
}
Это должно дать вам только одного покупателя. Теперь нам нужно сделать его динамическим, чтобы вы могли передать идентификатор или аналог функции:
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);
}
Теперь отредактируйте свой индекс соответствующим образом, чтобы вы могли передать идентификатор функции индекса для динамической настройки.
Это лучшее решение. Мне нужно изменить $ kunden-> vorname на $ kunden ['vorname'] Но теперь у меня следующая ошибка: Неопределенное свойство: Symfony \ Component \ HttpFoundation \ ResponseHeaderBag :: $ vorname (View: C: \ xampp \ htdocs \ mvs \ mvs \ resources \ views \ dynamic_pdf.blade.ph p)
Похоже, вы вызываете метод
indexпри нажатии кнопки. Можете ли вы проверить, вызывается ли правильный метод контроллера?