【问题标题】:Laravel 4 - Where to call View::shareLaravel 4 - 在哪里调用 View::share
【发布时间】:2014-10-16 02:21:06
【问题描述】:

全部

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

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

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

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

Laravel 在namespace Illuminate\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);
}

我发现当用户登录成功时,topMenus 共享成功。但是当我点击其他页面时,不能在sharedtopMenus

似乎一切正常,我很困惑。有谁知道吗?

提前致谢。

【问题讨论】:

    标签: php view laravel-4 laravel-routing


    【解决方案1】:

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

    1. 最简单和最简单的方法是将它添加到 app/start/global.php 的末尾,它在每个请求的开始处运行,适用于所有环境。

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

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

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

    【讨论】:

    • 谢谢。我从来没有使用过提供者,如果我创建了一个提供者,我该如何放置共享变量以及如何确保所有视图都可以访问它以及如何访问变量?我阅读了整个文档,但没有找到使用文档。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2014-07-24
    • 1970-01-01
    • 2013-02-09
    • 2015-06-06
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多