我正在阅读Laravel Blade文档,我不知道如何在模板中分配变量以供以后使用。我不能使用{{$old_section = "whatever"}},因为这将会返回"whatever",而我不想这样做。
我知道我可以做<?PHP $old_section = "whatever";>,但这并不优雅。
在Blade模板中是否有更好、更优雅的方式来做到这一点?
我正在阅读Laravel Blade文档,我不知道如何在模板中分配变量以供以后使用。我不能使用{{$old_section = "whatever"}},因为这将会返回"whatever",而我不想这样做。
我知道我可以做<?PHP $old_section = "whatever";>,但这并不优雅。
在Blade模板中是否有更好、更优雅的方式来做到这一点?
当前回答
同样的问题也困扰着我。但我能够通过使用以下代码段来管理这个问题。在你的刀片模板中使用这个。
<input type="hidden" value="{{$old_section = "whatever" }}">
{{$old_section }}
其他回答
从Laravel 5.2.23开始,你有了@php Blade指令,你可以使用内联或作为块语句:
@php($old_section = "whatever")
or
@php
$old_section = "whatever"
@endphp
入侵评论并不是一种非常可读的方式。此外,编辑器会将其着色为注释,有人在查看代码时可能会错过它。
试试这样做:
{{ ''; $hello = 'world' }}
它将编译成:
<?php echo ''; $hello = 'world'; ?>
...完成作业,不要重复任何东西。
你会把事情搞得太复杂了。
使用纯php
<?php $i = 1; ?>
{{$i}}
donesies。
(或者https://github.com/alexdover/blade-set看起来也很简单)
我们都是通过在视图中设置变量来“入侵”系统,所以为什么要让“入侵”变得更复杂呢?
在Laravel 4中测试。
另一个好处是语法高亮显示工作正常(我以前使用注释黑客,它是可怕的阅读)
我将扩展@Pim给出的答案。
将此添加到AppServiceProvider的引导方法中
<?php
/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @set(name, value)
| </code>
|--------------------------------------------------------------------------
*/
Blade::directive('set', function($expression) {
list($name, $val) = explode(',', $expression);
return "<?php {$name} = {$val}; ?>";
});
这样就不会暴露编写任何php表达式的能力。
你可以像这样使用这个指令:
@set($var, 10)
@set($var2, 'some string')
Laravel 5你可以很容易做到这一点。见下文
{{--*/ @$variable_name = 'value' /*--}}