Laravel-当 if、else 和 endif 都存在时,为什么我的 Blade 文件会给出意外的文件结尾?

问题描述 投票:0回答:2

我正在开发一个 Laravel 应用程序,并且有一个功能可以导出根据用户提交到表单的输入生成的 PDF 文件。

我试图根据 PHP 变量之一的值将该 PDF 的内容设为有条件的,因此已将

@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,尽管当我尝试打开它时它实际上并未加载 - 它会出现错误.

php laravel
2个回答
0
投票

如果其他人遇到同样的问题,我花了 20 分钟才解决。如果您在不转义引号的情况下进行比较,请验证您的 @if 指令,因此按照示例

@if($test == 'modèle d'indication')

应该是

@if($test == 'modèle d\'indication') or @if($test == "modèle d'indication")

-1
投票

尝试用此替换第一个 @if 语句

@if( count( $request->transactionItem ) == 1  && $request->transactionItem->currentStatusId == '1010') 
© www.soinside.com 2019 - 2024. All rights reserved.