Laravel blade 全局变量
Laravel blade global variable
我在 laravel 中的全局变量中遇到问题。我知道视图作曲家,我的问题与该主题无关。
如何在 laravel 视图 (*.blade.php | .php) 模板引擎中做这么简单的事情?
例如,这是我的一个观点的示例代码 (.blade.php | *.php):
<?php
function myFunc() {
global $myvar;
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
$myvar = 'my var value';
myFunc();
在执行结束时它显示 'my var is empty' 而不是 'my var value'。
有人知道为什么会这样吗?
最好的解决方案是使用 Config
门面。您可以创建一个新的配置文件,并在您的情况下静态设置全局变量。但是这个外观的最佳特性是 get()
和 set()
方法,它们允许您动态定义这些变量。参见:
你的情况:
<?php
function myFunc() {
$myvar = Config::get('vars.myvar');
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
Config::set('vars.myvar');
myFunc();
确保使用文件顶部的 use
导入 Config
门面。
我终于找到了答案,它有范围问题。因为 laravel 使用 class 和方法来检索 view 所以基于此页面信息:
http://php.net/manual/en/language.variables.scope.php#98811
所以我们可以这样写代码:
<?php
function myFunc() {
global $myvar;
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
global $myvar; // This line is the key
$myvar = 'my var value';
myFunc();
在 Laravel 中,您可以将值从包含的 sub-blade 传递到主 blade,方法是在主视图和子视图中声明您希望传递值的变量为全局变量.关键是在两端都将传递变量声明为全局变量(即,在主要和包含 blade 中)。
例如:
已包含 SUB-BLADE
<? global $monetary_total; ?> <!-- somewhere up top of your sub-blade declare your variable as global scope -->
@foreach ($monetary_assets_joint as $monetary_asset)
.... your code that cycles through rows and pulls a value...
<td>{{$monetary_asset->monetary_asset_value}} </td> <!-- somewhere you'll display the pulled values -->
... rest of your view code and markup ....
<?php $monetary_total += $monetary_asset->monetary_asset_value; //summing up pulled row value into passing variable ?>
@endforeach
主要BLADE:
<? global $monetary_total; ?> <!-- somewhere up top of your blade declare your variable as global scope -->
...
@include('partials.sub_blade') <!-- somewhere you include your sub-blade -->
...
{{$monetary_total}} <!-- display summed total from included sub-bade's rows -->
希望对您有所帮助。
我在 laravel 中的全局变量中遇到问题。我知道视图作曲家,我的问题与该主题无关。 如何在 laravel 视图 (*.blade.php | .php) 模板引擎中做这么简单的事情? 例如,这是我的一个观点的示例代码 (.blade.php | *.php):
<?php
function myFunc() {
global $myvar;
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
$myvar = 'my var value';
myFunc();
在执行结束时它显示 'my var is empty' 而不是 'my var value'。 有人知道为什么会这样吗?
最好的解决方案是使用 Config
门面。您可以创建一个新的配置文件,并在您的情况下静态设置全局变量。但是这个外观的最佳特性是 get()
和 set()
方法,它们允许您动态定义这些变量。参见:
你的情况:
<?php
function myFunc() {
$myvar = Config::get('vars.myvar');
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
Config::set('vars.myvar');
myFunc();
确保使用文件顶部的 use
导入 Config
门面。
我终于找到了答案,它有范围问题。因为 laravel 使用 class 和方法来检索 view 所以基于此页面信息: http://php.net/manual/en/language.variables.scope.php#98811
所以我们可以这样写代码:
<?php
function myFunc() {
global $myvar;
if ( ! $myvar ) {
$myvar = 'my var is empty';
}
dd( $myvar );
}
global $myvar; // This line is the key
$myvar = 'my var value';
myFunc();
在 Laravel 中,您可以将值从包含的 sub-blade 传递到主 blade,方法是在主视图和子视图中声明您希望传递值的变量为全局变量.关键是在两端都将传递变量声明为全局变量(即,在主要和包含 blade 中)。
例如:
已包含 SUB-BLADE
<? global $monetary_total; ?> <!-- somewhere up top of your sub-blade declare your variable as global scope -->
@foreach ($monetary_assets_joint as $monetary_asset)
.... your code that cycles through rows and pulls a value...
<td>{{$monetary_asset->monetary_asset_value}} </td> <!-- somewhere you'll display the pulled values -->
... rest of your view code and markup ....
<?php $monetary_total += $monetary_asset->monetary_asset_value; //summing up pulled row value into passing variable ?>
@endforeach
主要BLADE:
<? global $monetary_total; ?> <!-- somewhere up top of your blade declare your variable as global scope -->
...
@include('partials.sub_blade') <!-- somewhere you include your sub-blade -->
...
{{$monetary_total}} <!-- display summed total from included sub-bade's rows -->
希望对您有所帮助。