为什么简码@php()会干扰@php和@endphp

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

我正在寻找刀片文件(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

错误

Example

php laravel laravel-blade
1个回答
0
投票

正如我在评论中提到的,这似乎是一个范围界定问题(或任何你想称之为的问题)。

我在自己的项目中做了一些测试。 在视图中添加以下代码片段;

@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
© www.soinside.com 2019 - 2024. All rights reserved.