2014-03-27 237 views
2

我希望在一个单独的文件中定义全局变量,然后将其注入到我想要的任何位置,所以对于Laravel 4 + Blade,我做到了这一点。Laravel 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 "> 

然后它不能找到变量的值。错误信息:

Undefined variable: STYLE_PATH_CSS. 

任何人都可以帮我吗?

+0

最好的做法是在控制器中定义变量,并将其传递给视图... 只要保持它的简单和常规... 使您的应用程序更复杂将导致问题为你未来 –

+0

只需尝试重新构建您的应用代码...'因为您的Laravel确实拥有数百个解决方案 –

回答

6

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

提供全局变量刀片意见,并确保他们将可在任何时候,最好的办法是使用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'; 

看看文档:http://laravel.com/docs/responses#views

+0

完美无瑕,这真是太棒了!耻辱我应该更好地使用官方文档。谢谢!! –

+0

+1解释如何将其包含在单独的文件中 – ryanwinchester

6

​​是最好的做全球变数的方法。

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

要确保一定的变数,每一个特定的视图渲染的时候,我喜欢View Composers

可以包括的东西时,某些观点被渲染。我想你可以在你的主版面上使用它,使差不多是全局。它提供了更多的控制,如果你需要广泛使用的东西,这会很好,但是如果它敏感并且你不想在任何地方。

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