Laravel Blade模板中的全局变量

web*_*ker 2 laravel blade laravel-4

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

顶级文件example.blade.php:

@include('head')    
@include('body')
Run Code Online (Sandbox Code Playgroud)

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 "> 
Run Code Online (Sandbox Code Playgroud)

body.blade.php

<script src="styleFolder/foundation/js/vendor/jquery.js"></script>
<script src="styleFolder/foundation/js/foundation.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

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

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" ?>
Run Code Online (Sandbox Code Playgroud)

和新的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 "> 
Run Code Online (Sandbox Code Playgroud)

那么它找不到变量的价值.错误信息:

Undefined variable: STYLE_PATH_CSS.
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

Ant*_*iro 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');
Run Code Online (Sandbox Code Playgroud)

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

require app_path().'/composers.php';
Run Code Online (Sandbox Code Playgroud)

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


rya*_*ter 6

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

View::share('name', 'Steve');
Run Code Online (Sandbox Code Playgroud)

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

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

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});
Run Code Online (Sandbox Code Playgroud)