我正在阅读Laravel Blade文档,我不知道如何在模板中分配变量以供以后使用。我不能使用{{$old_section = "whatever"}},因为这将会返回"whatever",而我不想这样做。

我知道我可以做<?PHP $old_section = "whatever";>,但这并不优雅。

在Blade模板中是否有更好、更优雅的方式来做到这一点?


当前回答

你可以使用我发布的软件包:https://github.com/sineld/bladeset

然后你可以轻松地设置你的变量:

@set('myVariable', $existing_variable)

// or

@set("myVariable", "Hello, World!")

其他回答

至于我优雅的方式是这样的

{{ ''; $old_section = "whatever"; }}

然后回显$old_section变量。

{{ $old_section }}

在刀片文件中,可以使用这种格式

@php
  $i++
@endphp

在laravel4中,您可以使用模板注释语法来定义/设置变量。

注释语法是{{——这里的任何东西都是Comment——}},它被blade引擎渲染为

<?PHP /* anything这里是comment */ ?>

比如,我们可以用它来定义变量

{{-- */$i=0;/* --}}

会被刀片渲染吗 < ?PHP /* */$i=0;/* */ ?>为我们设置变量。 无需更改任何代码行。

有一个简单的解决方法,不需要更改任何代码,它在Laravel 4中也同样有效。

您只需在传递给@if语句的表达式中使用赋值操作符(=),而不是(例如)==这样的操作符。

@if ($variable = 'any data, be it string, variable or OOP') @endif

然后你可以在任何地方使用它你可以使用任何其他变量

{{ $variable }}

唯一的缺点是你的任务看起来像一个错误,别人不会意识到你这样做是为了解决问题。

如果你有PHP 7.0:

最简单有效的方法是在括号内赋值。

规则很简单:使用变量是否超过一次?然后在括号内声明它第一次使用,保持冷静,继续下去。

@if(($users = User::all())->count())
  @foreach($users as $user)
    {{ $user->name }}
  @endforeach
@else
  There are no users.
@endif

是的,我知道@forelse,这只是一个演示。

由于变量现在被声明为和当它们被使用时,不需要任何刀片工作区。