我希望在一个单独的文件中定义全局变量,然后在任何我想要的地方注入,所以对于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.
任何人都可以帮助我吗?
答案 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'); 定义全局变量的最简单方法