【发布时间】:2018-11-01 15:43:28
【问题描述】:
我正在开发一个 Laravel/Angular 应用程序,其中一个页面具有将用户输入表单的一些信息导出为 PDF 的功能。
PDF 写在一个 Blade.php 文件中:
<html>
<head>
<title>App - Provisional Reminder</title>
<link rel="stylesheet" href="{{ url('') }}/css/pdf.css">
</head>
<body style="...">
@foreach ($items as $item)
<table>
... HTML here...
</table>
@if($item['itemDetail']['itemProperty'] !== 'ParticularItemProperty')
<p style="page-break-before: always"></p>
@include('pdfs.partials.request')
@endif
... A few more simiar @if statements here...
@endforeach
</body>
</html>
目前,PDF 始终由三页组成(每一页显示有关用户输入表单的信息的特定方面的信息。
我想根据用户导出为 PDF 的任何项目的 itemProperty 的值,使生成的 PDF 的内容成为有条件的。
我尝试用@if、@else 和@endif 声明包围PDF 的内容:
<html>
<head>
<title>App - Provisional Reminder</title>
<link rel="stylesheet" href="{{ url('') }}/css/pdf.css">
<head>
@if(( count( {{ $item['itemDetail'] }} ) === 1 ) && ({{ $item['itemDetail']['itemProperty'] }} === '1010'))
<body style="...">
<p>if statement run in blade.php</p>
</body>
@else
<body>
<p>else statement run in blade.php</p>
</body>
@endif
</html>
我无法在我的@if、@else 和@endif PHP 语句中有条件地显示blade.php 文件的原始内容,所以只是尝试显示一些非常基本的HTML - 如上所述,只是为了看到代码实际上正在运行/正确生成。
但是,当我单击链接以生成并下载 PDF,并在将生成的 Blade.php 文件中包含此代码时,我在浏览器中收到一条消息:
生成 PDF 时出现问题
浏览器控制台显示:
解析错误:语法错误,意外'
为什么@if 会导致此错误? HTML 显然很好,因为如果我删除 @if 并下载文件,它会正确显示。
我认为这一定与我在 @if() 语句中引用的 PHP 变量有关,就好像我将 @if() 更改为简单的东西,例如:
@if( 1 === 1)
然后尝试下载PDF,它下载并正确打开,我可以看到PDF页面上显示if statement run in reminder.blade.php的文字。
我在引用我的@if() 所基于的 PHP 变量时做错了什么?
【问题讨论】:
-
@if(( count( {{ $item['itemDetail'] }} ) === 1 ) && ({{ $item['itemDetail']['itemProperty'] }} === '1010'))- 为什么{{ }}在这个if声明中?他们不应该在那里。{{ }}用于简单地回显值。 -
使用
@stuff时,您已经在模板上下文(解析器)中,因此无需使用另一个模板函数{{}},因为您已经在其中了;解析器试图将其视为混乱的 php 代码