在laravel中定义全局变量

O P*_*O P 2 php laravel laravel-3

型号:Comment.php

class Comment extends Eloquent {
    protected $table = 'comments';
    public $timestamps = true;
}
Run Code Online (Sandbox Code Playgroud)

控制器:PageController.php

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

查看:page.blade.php

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

这与page.blade.php我可以定义为route(/page)的视图完美配合.但是,我似乎无法弄清楚如何在全球范围内实现这一目标.

示例:我希望能够在我的文件中使用@foreach包含.现在,如果我是使用上面的,它的伟大工程上,但不是在,,$top_commentsmaster.blade.php/page//about/tos

Joe*_*inz 6

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

另一种方法是利用视图作曲家,如下所示:

View::composer('master', function($view)
{
    $view->with('top_comments', Comment::take(3)->get());
});
Run Code Online (Sandbox Code Playgroud)

如果你的意思是你想要它,master.blade.php无论它从哪里加载,这都有效,因为它绑定到那个视图.如果您选择此选项,我建议您创建一个文件composers.php并将其包含在中app/start/global.php.

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

  • 把它放在你的路由文件中,过滤文件或创建一个`app/composers.php`文件并加载`require app_path().'/ composers.php';`到你的`app/start/global.php`文件. (2认同)