我正在寻找刀片文件(Laravel)中混合
@php()
和 @php ... @endphp
的代码失败的原因,并且在文件中一致使用这些代码的情况下工作正常。我刚刚通过艰难的方式了解到这一点,但找不到原因。
失败:
@php($foo = 'foo')
<h1>{{ $foo }}</h1>
@php
$bar = $foo . 'bar';
@endphp
@for($i = 1; $i<10; $i++)
<h2><b>{{ $i }}<b/>{{ $bar }}</h2>
@endfor
工作正常:
@php($foo = 'foo')
<h1>{{ $foo }}</h1>
@php($bar = $foo . 'bar');
@for($i = 1; $i<10; $i++)
<h2><b>{{ $i }}<b/>{{ $bar }}</h2>
@endfor
也能正常工作:
@php
$foo = 'foo';
@endphp
<h1>{{ $foo }}</h1>
@php
$bar = $foo . 'bar';
@endphp
@for($i = 1; $i<10; $i++)
<h2><b>{{ $i }}<b/>{{ $bar }}</h2>
@endfor
错误
正如我在评论中提到的,这似乎是一个范围界定问题(或任何你想称之为的问题)。
我在自己的项目中做了一些测试。 在视图中添加以下代码片段;
@php($foo = 'foo')
<p>{{ $foo }}</p>
@php
$bar = $foo . 'bar';
@endphp
@for($i = 1; $i<10; $i++)
<h2><b>{{ $i }}<b/>{{ $foo }}</h2>
@endfor
结果如下,原始 PHP 输出:
<?php($foo = 'foo')
<p>{{ $foo }}</p>
@php
$bar = $foo . 'bar';
?>
<?php for($i = 1; $i<10; $i++): ?>
<h2><b><?php echo e($i); ?><b/><?php echo e($bar); ?></h2>
<?php endfor; ?>
您可以看到它失败的原因,
@php($foo = 'foo')
指令被视为起始 PHP 标签,直到 @endphp
变量初始化后的 $bar
指令才结束。这意味着 @php($foo = 'foo')
和 @endphp
指令之间的所有代码都不会被视为 PHP 代码。
Laravel 也不再推荐使用内联 PHP 指令,正如在 (最近的)对有同样问题的人的回复 中可以看到的那样。
因此,我建议(就像他们一样),就像您在上一个示例中所做的那样,只使用常规 PHP 块:
@php
$foo = 'foo';
@endphp
<h1>{{ $foo }}</h1>
@php
$bar = $foo . 'bar';
@endphp
@for($i = 1; $i<10; $i++)
<h2><b>{{ $i }}<b/>{{ $bar }}</h2>
@endfor