{{ $old_section = "whatever" }}
,因为它会输出“whatever”,而我不想要那样。我知道可以使用
<?php $old_section = "whatever"; ?>
,但那不够优雅。在 Blade 模板中是否有更好、更优雅的方法来处理这个问题?
{{ $old_section = "whatever" }}
,因为它会输出“whatever”,而我不想要那样。<?php $old_section = "whatever"; ?>
,但那不够优雅。简单方法
如果您想定义多个变量,请使用 Blade 指令的完整形式:
@php
$i = 1;
$j = 2;
@endphp
如果您只想定义一个变量,也可以使用单个PHP语句:@php($i = 1)
更高级:添加一个“DEFINE”标签
如果您想使用自定义标签并使用@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.php 的 boot() 函数中即可。
更好的解决方案: 创建自己的服务提供程序。请参见https://dev59.com/9WMl5IYBdhLWcg3wiXV7#28641054以了解如何在 Laravel 5 中扩展 Blade。这种方法需要更多的工作,但是它是使用提供程序的好练习 :)
完成上述更改后,您可以使用:
@define $i = 1
定义一个变量。
@php(@i = 1)
或在块语句中使用它(使用@endphp
关闭)。 - Daan在视图中这样做是不鼓励的,因此没有相应的Blade标签。 如果确实想要在Blade视图中这样做,可以直接像您编写的那样打开PHP标记,或者注册一个新的Blade标签。以下是示例:
<?php
/**
* <code>
* {? $old_section = "whatever" ?}
* </code>
*/
Blade::extend(function($value) {
return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});
{?
,而不能直接使用原生的<?
? - Justin<?php $i=0; ?>
更好。 - gyo有一个简单的解决方法,不需要更改任何代码,在 Laravel 4 中同样适用。
你可以在传递给 @if
语句的表达式中使用赋值运算符 (=
),而不是(例如)==
等运算符。
@if ($variable = 'any data, be it string, variable or OOP') @endif
然后您可以在任何可以使用其他任何变量的地方使用它
{{ $variable }}
唯一的缺点是如果有人不知道你这样做是为了解决问题,那么你的任务看起来就像是一个错误。
你们把它搞得太复杂了。
只需使用原始的PHP。
<?php $i = 1; ?>
{{$i}}
donesies.
(或者https://github.com/alexdover/blade-set看起来也很简单)
我们都有点像在“黑客攻击”系统,通过在视图中设置变量,那么为什么要让这个“黑客攻击”比必要的更加复杂呢?
在 Laravel 4 中进行了测试。
另一个好处是语法高亮可以正常工作(我之前使用评论黑客技巧,但阅读起来太糟糕了)
自Laravel 5.2.23版本以来,您可以使用@php Blade指令,您可以将其用于内联或块语句中:
@php($old_section = "whatever")
或者@php
$old_section = "whatever"
@endphp
您可以通过以下方式在Blade模板引擎中设置变量:
1. 通用PHP块
设置变量:<?php $hello = "Hello World!"; ?>
输出:{{$hello}}
2. Blade PHP块
设置变量:@php $hello = "Hello World!"; @endphp
输出:{{$hello}}
您可以在视图文件中设置一个变量,但它会按照您设置的方式进行打印。无论如何,有一个解决方法。您可以将变量设置在未使用的部分内。例如:
@section('someSection')
{{ $yourVar = 'Your value' }}
@endsection
那么{{ $yourVar }}
将在你想要的任何地方打印Your value
,但是当你保存变量时,你不会得到输出。
编辑:必须命名该部分,否则将抛出异常。
在laravel文档中 https://laravel.com/docs/5.8/blade#php 你可以这样做:
@php
$my_variable = 123;
@endphp
在 Laravel 4 中:
如果您希望该变量在所有视图中都可以访问,而不仅仅是模板中,请使用View::share
方法(此博客有更多信息)。
只需在 app/controllers/BaseController.php 中添加以下代码:
class BaseController extends Controller
{
public function __construct()
{
// Share a var with all views
View::share('myvar', 'some value');
}
}
现在,$myvar
将会对你的所有视图(包括模板)可用。
我使用了这个来为我的图片设置特定于环境的资源URL。
<?php $old_section = "whatever"; ?>
有什么问题?我觉得它非常易读。 - Jaime Hablutzel