在laravel中定义全局变量

时间:2014-05-15 07:44:24

标签: php laravel laravel-3

型号:Comment.php

class Comment extends Eloquent {
    protected $table = 'comments';
    public $timestamps = true;
}

控制器:PageController.php

class PageController extends BaseController {
    $top_comments = Comment::take(3)->get();
    return View::make('page', array('top_comments' => $top_comments));
}

查看:page.blade.php

@foreach ($top_comments as $comment)
    user #{{ $comment->user_id }}:<br />
    {{ $comment->comment}}
@endforeach

这适用于page.blade.php视图,我可以将其定义为路径(/page)。但是,我似乎无法弄清楚如何在全球范围内实现这一目标。

示例:我希望能够在@foreach文件中使用包含$top_comments的{​​{1}}。现在,如果我要使用上述内容,它在master.blade.php上运行良好,但在/page//about

上运行良好

1 个答案:

答案 0 :(得分:6)

您可以使用View::share('top_comments', Comment::take(3)->get());使其随处可用。当然,如果你想在每个可能的视图中使用它,无论你加载什么页面,你都必须把它放在一个加载的地方。 (一个这样的地方将是你__construct()的{​​{1}}方法,但我怀疑这可以被认为是最佳做法。不知道我自己把它放在哪里。)

另一种方法是利用视图编辑器,如下所示:

BaseController

如果您想在View::composer('master', function($view) { $view->with('top_comments', Comment::take(3)->get()); }); 中想要它,无论它从哪里加载,都可以使用,因为它与该视图绑定。如果您选择此选项,我建议您创建一个文件master.blade.php并将其包含在composers.php中。

那就是说,我假设上面的控制器示例留下了一些东西,因为看起来它缺少一个方法声明。