Неверный вид создать PDF-файл laravel

При нажатии кнопки я хочу 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-файл со ВСЕМИ клиентами в таблице. Но мне нужны данные только от конкретного пользователя ...

Похоже, вы вызываете метод index при нажатии кнопки. Можете ли вы проверить, вызывается ли правильный метод контроллера?

Nabin Paudyal 23.10.2018 13:05

Я добавил маршрут. Может это поможет?

Dierig Patrick 23.10.2018 13:30

Вы вызываете неправильное действие контроллера. @get_customer_data получает только клиента из базы данных и возвращает модель. Вы должны вызвать действие @pdf.

Remul 23.10.2018 13:36

Я обновил пост

Dierig Patrick 23.10.2018 13:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
76
2

Ответы 2

Поскольку ваши коды вызовов информации пользователей проверяют этот маршрут:

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)

Dierig Patrick 23.10.2018 15:44

Другие вопросы по теме