Laravel - почему мой blade-файл дает неожиданный конец файла, если if, else & endif все присутствуют? - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над приложением Laravel, и у меня есть функция для экспорта PDF-файла, созданного на основе данных, которые пользователь отправил в форму.

Я пытаюсь сделать содержимое этого PDF-файла условным, основываясь на значении одной из переменных PHP, поэтому добавил условия @if, @else и @endif в блейд-файл, но для некоторых причина, теперь появляется ошибка в консоли при попытке экспортировать PDF:

Ошибка разбора: синтаксическая ошибка, неожиданный конец файла, ожидание elseif (T_ELSEIF) или else (T_ELSE) или endif (T_ENDIF) (представление: /home/.../reminder.blade.php)

Файл blade.php в настоящее время записывается с:

<html>

<head>
    <title>Provisional Reminder</title>
    <link rel="stylesheet" href="{{ url('') }}/css/pdf.css">
</head>
@if(( count( $request->transactionItem ) == 1 ) && $request->transactionItem->currentStatusId == '1010') 

<body style="-webkit-font-smoothing: antialiased; font-family: 'Roboto'; font-weight: normal; margin: 0; padding: 0;">
    <p>if statement run in reminder.blade.php</p>
</body>

@else
<body>
    <p>else statement run in reminder.blade.php</p>
</body>
@endif

</html>

else & endif оба есть, так почему я получаю эту ошибку? Как получить содержимое блейд-файла для условного отображения на основе значения переменной запроса?

PDF создается функцией PHP:

private function generateProvPDF($transactions, $globalData)
{
    $data = ['transactions' => $transactions, 'globalData' => $globalData];
    //dd("transactions: ", $transactions);

    //$view = \View::make('pdfs.reminder', $data);
    //$contents = $view->render();

    //echo $contents;
    //die;

    $pdf = \PDF::loadView('pdfs.reminder', $data) 
    ->setOption('encoding', 'utf-8')
    ->setOption('margin-top', 0)
    ->setOption('margin-bottom', 0)
    ->setOption('margin-left', 0)
    ->setOption('margin-right', 0)
    ->setPaper('a4');

    return $pdf->stream();
}

Редактировать

Код в моем контроллере PHP, который вызывает эту функцию:

public function getSingleTransactionPDF(Request $request)
{
    $transactionItem = $request->input('transactionItem');

    $vTransactionItem = (array)DB::table('transaction.vTransactionPDF')->where('transactionItemId', $transactionItem['transactionItemId'])->first();

    if (!empty($vTransactionItem))
    {
        $transactionItem = array_merge($transactionItem, $vTransactionItem);

        $loggedInUser = auth()->user();
        $globalData = $this->retrieveGlobalPDFData();
        $transactionsData = $this->retrievePDFPrimaryLineItemData([$transactionItem], $loggedInUser);

        dd("transactionsData, globalData: ", $transactionsData, $globalData);

        return $this->generateProvTaxPDF($transactionsData, $globalData);
    }
    else
    {
        return response()->json([
            'error' => true,
            'message' => 'Transaction not found.',
        ], 404);
    }
}

Если я закомментирую здесь строку dd("transactionsData ...", ...), я получу Parse error, о котором я упоминал выше. Однако, если я оставлю это dd() в, я вижу, что переменные содержат ожидаемые значения, и PDF загружается, хотя на самом деле он не загружается, когда я пытаюсь его открыть, - появляется ошибка .

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Нет ошибки в вашем reminder блейде. Я проверил ваш блейд-код и он успешно работает. Поэтому, пожалуйста, перепроверьте свой код в контроллере и других зависимых файлах этой задачи. Рабочий код:

<html>
<head>
<title>Provisional Reminder</title>
<link rel="stylesheet" href="{{ url('') }}/css/pdf.css">
</head>
@php $a = array('1');  $status = 'hello';@endphp
@if((count($a) == 1 ) && $status == 'hello') 
 <body style="-webkit-font-smoothing: antialiased; font-family: 'Roboto'; font-weight: normal; margin: 0; padding: 0;">
<p>if statement run in reminder.blade.php</p>
</body>
@else
<body>
<p>else statement run in reminder.blade.php</p>
</body>
@endif

и вывод: если оператор запускается в remder.blade.php

0 голосов
/ 05 ноября 2018

Попробуйте заменить первый оператор @if этим

@if( count( $request->transactionItem ) == 1  && $request->transactionItem->currentStatusId == '1010') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...