Laravel 4 - 在哪里调用View :: share

时间:2014-10-16 02:21:07

标签: php view laravel-4 laravel-routing

所有

我知道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);
}

所以,因为我正在使用View共享,也就是说,在所有其他视图中,我现在可以使用topMenussubMenus

但是当我点击其他页面时,我收到错误:Undefined variable: topMenus

所以,我很困惑发生了什么?我深入研究View :: share源代码

Laravel在Environment下有一个名为namespace Illuminate\View的课程。

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);
}

我发现用户成功登录后,topMenus已成功共享。但是当我点击其他页面时,topMenus可以shared

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

先谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您的View::share语句永远不会为其他路由运行。 在Laravel 4.x 中,有很多地方可以将它放在每次运行的地方,但这两个地方最常用:

  1. 最简单,最简单的方法是在所有环境的每个请求的 start app/start/global.php末尾添加它。

  2. 另一种方法是创建一个新的服务提供商,确保它可自动加载并将其添加到app/config/app.php的{​​{1}}数组中。

  3. 如果您想要的只是分享一些观点,我会说,为此创建一个全新的课程有点过分。但是,如果您开始注意到providers文件过于混乱,我建议您开始将内容拆分为服务提供商。

    PS:在Laravel 5中,app/start/global.php已被移除,您只能使用第二个选项。