Php Laravel 4-在何处调用视图::共享

Php Laravel 4-在何处调用视图::共享,php,view,laravel-4,laravel-routing,Php,View,Laravel 4,Laravel Routing,全部 我知道View::share应该在我的应用程序中的任何地方都可用,一个常见的地方是我的routes.php文件 我正在这样做 1) 用户登录系统,成功登录后,共享所有视图的内容 2) 当用户单击其他页面时,可以使用共享变量 好的,我的控制器 public function index() { $data = array( "pageTitle" => "index", ); $privilegeMenu = $this->privile

全部

我知道
View::share
应该在我的应用程序中的任何地方都可用,一个常见的地方是我的
routes.php
文件

我正在这样做

1) 用户登录系统,成功登录后,共享所有视图的内容

2) 当用户单击其他页面时,可以使用共享变量

好的,我的控制器

public function index() {
    $data = array(
        "pageTitle" => "index",
    );

    $privilegeMenu = $this->privilegeApi->getUserPrivilegeByUserId(Session::get('uid'));
    $topMenus = $this->menuApi->getTopMenuById($privilegeMenu);
    $subMenus = $this->menuApi->getSubMenuesById($privilegeMenu);

    View::share('topMenus', $topMenus);
    View::share('subMenus', $subMenus);

    return View::make('home.index',$data);
}
因此,因为我使用的是视图共享,也就是说,在其他视图中,我现在可以使用
顶部菜单
子菜单

但是当我点击其他页面时,我得到了错误:
未定义变量:topmones

所以,我很困惑到底发生了什么?我深入查看::共享源代码

Laravel在
namespace\View
下有一个名为
Environment
的类

protected $shared = array();

public function share($key, $value = null)
{
    if ( ! is_array($key)) return $this->shared[$key] = $value;

    foreach ($key as $innerKey => $innerValue)
    {
        $this->share($innerKey, $innerValue);
    }
}

public function shared($key, $default = null)
{
    return array_get($this->shared, $key, $default);
}
我发现当用户成功登录时,
topmones
成功共享。但是,当我单击其他页面时,无法在
共享的
中单击顶部菜单

似乎一切都好,我很困惑。有人知道吗


感谢高级版。

这是因为您的
View::share
语句从未针对其他路由运行过在Laravel 4.x中,有很多地方可以放在每次运行的地方,但这两个地方最常用:

  • 最简单、最简单的方法是将其添加到
    app/start/global.php
    的末尾,该应用程序在所有环境的每个请求开始时运行

  • 另一种方法是创建一个新的服务提供者,确保它是自动加载的,并将其添加到
    app/config/app.php
    提供者
    数组中

  • 如果您只想分享一些观点,我想说,仅仅为此创建一个全新的类有点过火。但是,如果您开始注意到您的
    app/start/global.php
    文件变得太乱,我建议您开始将内容拆分为服务提供商


    PS:在Laravel 5中,
    app/start/global.php
    被删除,您只剩下第二个选项。

    谢谢。我从未使用过provider,如果我创建了一个provider,如何放置共享变量,如何确保所有视图都可以访问它,如何访问变量?我看了整个文档,但没有找到使用文档。非常感谢。