如何在 Laravel Blade 模板中设置变量

2022-08-30 06:02:55

我正在阅读Laravel Blade文档,我无法弄清楚如何在模板中分配变量以供以后使用。我不能这样做,因为这会呼应“任何东西”,我不想那样。{{ $old_section = "whatever" }}

我知道我能做到,但这并不优雅。<?php $old_section = "whatever"; ?>

有没有更好、更优雅的方法可以在 Blade 模板中执行此操作?


答案 1

拉拉维尔 5.5 及以上

使用刀片式服务器指令的完整形式:

@php
$i = 1
@endphp

拉拉维尔 5.2 - 5.4

您可以使用内联标签:

@php ($i = 1)

或者,您可以在块语句中使用它:

@php
$i = 1
@endphp

添加“定义”标记

如果要使用自定义标记并使用@define而不是@php,请按如下方式扩展 Blade:

/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/

\Blade::extend(function($value) {
    return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});

然后执行下列操作之一:

快速解决方案:如果您很懒惰,只需将代码放在AppServiceProvider的boot()函数中.php。

更好的解决方案:创建自己的服务提供商。请参阅 https://stackoverflow.com/a/28641054/2169147 如何在 Laravel 5 中扩展刀片。以这种方式工作得更多,但是有关如何使用提供程序的良好练习:)

拉拉维尔 4

你可以把上面的代码放在app/start/global的底部.php(或者如果你觉得更好,可以放在其他任何地方)。


完成上述更改后,您可以使用:

@define $i = 1

以定义变量。


答案 2

不鼓励在视图中执行此操作,因此没有刀片标记。如果确实要在边栏选项卡视图中执行此操作,可以在编写时打开 php 标记,也可以注册新的叶片标记。举个例子:

<?php
/**
 * <code>
 * {? $old_section = "whatever" ?}
 * </code>
 */
Blade::extend(function($value) {
    return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});

推荐