Ошибка получения неопределенной переменной при передаче переменной PHP в виде ссылки на тег привязки в представлении - PullRequest
0 голосов
/ 27 декабря 2018

Я работаю над приложением Laravel, в результате которого я получаю некоторые данные из API (это исполняемая ссылка, которая открывает PDF-документ при нажатии).Я извлекаю данные, хранящиеся в переменной, затем перехожу к представлению, но когда я добавляю их в атрибут href тега привязки, я получаю ошибку Неопределенная переменная: quotePdf .

Но когда я получаюданные после dd и вставьте его в тег ссылки привязки, он отлично работает

AJAX-код, отображающий представление

 $.ajax({
    type: "POST",
    url: "getquote",
    data: JSON.stringify(allData),
    contentType: "application/json",
    dataType: "json",
    cache: false,
    success: function(data){ 
      //The url that will render the view called quote.blade.php
      window.location.href="showquote" ;
    },
    error: function(data) {
        var errors = '';
        for(datos in data.responseJSON){
            errors += data.responseJSON[datos] + '\n';
        }
        alert(errors);
    }
});

Контроллер, который выбирает код ипоказывает на внешнем интерфейсе

 public function createQuote(Request $request)
    {

        $quote = $this->global_Curl_Meta(
            $data, 'api/travel/create-quote')->data;

        //dd($quote);

        $quote_data = $quote;

        $quoteholder_name = $form['FirstName'] . ' ' . $form['MiddleName'] . ' ' . $form['LastName'];
        $quoteholder_email = $form['email'];
        $travel_plan = $plan;
        $quoteID = $quote_data->QuotationId;
        $quoteRef = $quote_data->QuoteNumber;

        $data = [
            'sts_quote_number' => $quoteRef
        ];

        //STS PDF Quote
        $quotePdf = $this->global_Curl_Meta(
            $data, 'api/v1/travel/sts-quote-doc')->data;

        //dd($quotePdf);

        //Get all teh variables and return to the view
        $quote_data = view("B2C::travel.quote", compact('quote_data', 'quoteholder_name', 'quoteholder_email', 'travel_plan' ,'phone' , 'quotePdf' ));

        return 'true';
    }

Ответ в браузере после dd

data:application/pdf;base64,JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIFNWTiB0YWdzL2ZvcC0xXzEpCi9Qcm9kdWNlciAoQXBhY2hlIEZPUCBWZXJzaW9uIFNWTiB0YWdzL2ZvcC0xXzEpCi9DcmVhdGlvbkRhdGUgKEQ6MjAxODEyMjcwODA0NTkrMDInMDAnKQo+PgplbmRvYmoKNSAwIG9iago8PAogIC9OIDMKICAvTGVuZ3RoIDExIDAgUgogIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nJ2Wd1RU1xaHz713eqHNMNIZeu9tAOldQHoVhWFmgKEMMMwAIjZEVCCiiIhgAwkKGDAaisSKKBaCggL2gAQBJQaj2FDJjKyV+PLy3svL7497v7XP3ueeXc5aFwCSdyorLQuWAiCNJ+AHe7nSI6Oi6dh+AAM8wAAzAJisrAz/EM9QIJKPhxs9S+QE/kWvhwEkft8yEu8F/j9JszL4AgCgQBFbsDlZLBEXijg1R5Ahts+KmBqfImYYJWa+6IAilhNz4iIbfvZZZGcxs9N4bBGLz5zBTmOLuUfEW7OFHBEjfiIuyuZyckR8W8SaqcI0rojfimPTOExRDiiS2C7gsJJEbCpiEj802E3ESwHAkRK/4PgvWMDJFYiTckvPWM3nJiYJ6LosPbqZrS2D7s3JSeUIBEaBTFYKk8+mu6WnZTB5qwFYzPmzZMS1pYuKbG1ma21tZG5s9kWh/uvi35S4t4v0MuhzzyBa3x+2v/JLrwOAMSeqzY4/bPF7AejYDIDcvT9smocAkBT1rf3GF/nQxPOSJBBk2JmY5OTkGHM5LGNxQX/X/3T4G/rie8bi7X4vD92dk8AUpgro4rqx0lPThXx6VgaTxaEb/XmI/3HgX5/DMJiTwOFzeKKIcNGUcXmJonbz2FwBN51H5/L+UxP

Представление, которое называется quote.blade.phpрендеринг через AJAX, все переменные отображаются правильно, кроме quotePdf

@section('content')

@php
//var_dump($quote_data);
$quote_number = $quote_data->QuoteNumber;
$quote_details = $quote_data->Calculation_Quote->Calculation;
@endphp
<div class="container">

<main class="top Quote">
  <h1 class="quote-title">Travel Insurance Quote
    <!-- Go Back --> 
    <a href="#" onclick="goBack()">  
      <span class="back-us"><i class="fas fa-arrow-left"></i>Back</span>
    </a> 
    <!--END-->
  </h1>
  <table class="table ref">
  <thead class="thead-dark">
    <tr>
      <th colspan="6"> {{$quoteholder_name}} </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td colspan="4" class="highlighted">Description</td>
      <td colspan="2" class="highlighted">Pricing</td>
    </tr>
    <tr>
      <td colspan="4"> Quote Reference </td>
      <td colspan="2"> {{$quote_number}} </td>
    </tr>
    <tr>
      <td colspan="4">{{$travel_plan}} Package </td>
      <td colspan="2"> $ {{round($quote_details->TravelBasicPremium,2)}} </td>
    </tr>
    <tr>
      <td colspan="4"><form>
    </tr>

    <tr>
      <td colspan="4" class="highlighted">Total</td>
      <td colspan="2" class="highlighted">$ {{round($quote_details->TravelTotalGrossPremium,2)}}</td>
    </tr>

    <tr>
      <td colspan="2"><i class="fas fa-print quote"></i> <a href="{{ $quotePdf }}" target="_blank">Print Quote </a></td>
    </tr>

  </tbody>
</table>

<h1 class="notice">Important! Please review our policy, terms and conditions before you continue. <a href="#"><span class="noticeClick">CLICK HERE</span></a></h1>

<span class="glyphicon glyphicon-print"></span>

</main>
</div>

@endsection

Ответы [ 4 ]

0 голосов
/ 27 декабря 2018

Вместо возврата к строке base64 ($ quotePdf) для просмотра.Вы можете сделать что-то вроде этого.

$decoded = base64_decode ($quotePdf);

$pdf = fopen ('quote.pdf','w');

fwrite ($pdf,$decoded);

fclose ($pdf);

header("Content-type:application/pdf");

header("Content-Disposition:attachment;filename='quote.pdf'");

readfile("quote.pdf");

Этот код расшифрует строку base64 и создаст файл PDF.и скачивает то же самое.Если вы хотите вернуть представление, вы можете сохранить PDF на сервере и вернуть путь к файлу в качестве ответа.

Надеюсь, это поможет !!

0 голосов
/ 27 декабря 2018

Попробуйте вот так:

<a href="{!! $quotePdf !!}" target="_blank">Print Quote </a>

0 голосов
/ 27 декабря 2018

Я могу ошибаться, но это то, что я наблюдал.

public function createQuote(Request $request)
            {

                $quote = $this->global_Curl_Meta(
                    $data, 'api/travel/create-quote')->data;

                //dd($quote);

                $quote_data = $quote;

                $quoteholder_name = $form['FirstName'] . ' ' . $form['MiddleName'] . ' ' . $form['LastName'];
                $quoteholder_email = $form['email'];
                $travel_plan = $plan;
                $quoteID = $quote_data->QuotationId;
                $quoteRef = $quote_data->QuoteNumber;

                $data = [
                    'sts_quote_number' => $quoteRef
                ];

                //STS PDF Quote
                $quotePdf = $this->global_Curl_Meta(
                    $data, 'api/v1/travel/sts-quote-doc')->data;

                //dd($quotePdf);

                //Get all teh variables and return to the view
                $quote_data = view("B2C::travel.quote", compact('quote_data', 'quoteholder_name', 'quoteholder_email', 'travel_plan' ,'phone' , 'quotePdf' ));

                return 'true';
            }

В вашей компактной функции вы передаете «телефон» как запись, которая нигде не определена, и, следовательно, она игнорирует каждый икаждая запись после этого.Попробуйте убрать «телефон» из компактной функции.

0 голосов
/ 27 декабря 2018

попробуйте это

$quote_data = view("travel.quote", ['quotePdf' => $quotePdf])->render();

иначе используется with метод

$quote_data = view("travel.quote")->with('quotePdf',$quotePdf)->render();
...