Laravel Blade模板中的全局变量

时间:2014-03-27 11:19:52

标签: laravel laravel-4 blade

我希望在一个单独的文件中定义全局变量,然后在任何我想要的地方注入,所以对于Laravel 4 + Blade,我做到了这一点。

顶级文件example.blade.php:

@include('head')    
@include('body')

head.blade.php

$STYLE_PATH_CSS="styleFolder/foundation/css" 
$STYLE_PATH_JS="styleFolder/foundation/js" 
$STYLE_PATH_JS_VENDOR="styleFolder/foundation/js/vendor"
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_CSS ?>/normalize.css ">
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_CSS ?>/foundation.css ">
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_JS_VENDOR ?>/modernizr.js "> 

body.blade.php

<script src="styleFolder/foundation/js/vendor/jquery.js"></script>
<script src="styleFolder/foundation/js/foundation.min.js"></script>

在那之前,它运作正常。然后我希望再简化一次:用全局变量替换重复路径。所以,

variables_G.blade.php

<?php  $STYLE_PATH_CSS="styleFolder/foundation/css" ?>
<?php  $STYLE_PATH_JS="styleFolder/foundation/js" ?>
<?php  $STYLE_PATH_JS_VENDOR="styleFolder/foundation/js/vendor" ?>

和新head.blade.php

@include('variables_G.blade.php')
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_CSS ?>/normalize.css ">
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_CSS ?>/foundation.css ">
<link rel="stylesheet" href=" <?php echo $STYLE_PATH_JS_VENDOR ?>/modernizr.js "> 
然后它无法找到变量&#39;值。错误讯息:

Undefined variable: STYLE_PATH_CSS.

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:6)

视图应该是愚蠢的,这也意味着你不应该在一个内部创建变量给另一个,你不应该给视图太多的责任。

向Blade Views提供全局变量并确保它们随时可用的最佳方法是使用View::share()

View::share('STYLE_PATH_CSS', 'styleFolder/foundation/css');
View::share('STYLE_PATH_JS', 'styleFolder/foundation/js');
View::share('STYLE_PATH_JS_VENDOR', 'styleFolder/foundation/js/vendor');

您可以将其添加到composers.php文件中并将其加载到app/start/global.php中:

require app_path().'/composers.php';

查看文档:{​​{3}}

答案 1 :(得分:6)

View::share();是制作全局变量的最佳方式。

View::share('name', 'Steve');

为了确保每次呈现某个视图时都包含某个变量,我喜欢View Composers

您可以在呈现某些视图时包含内容。我想你可以在主布局上使用它,使几乎全局。它提供了更多的控制,如果你需要广泛使用的东西,这将是好的,但如果它是敏感的,你不想在任何地方。

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});

答案 2 :(得分:0)

View :: share('name','value'); 定义全局变量的最简单方法