所有
我知道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共享,也就是说,在所有其他视图中,我现在可以使用topMenus
和subMenus
。
但是当我点击其他页面时,我收到错误: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
。
似乎一切都好,我很困惑。有人知道吗?
先谢谢。
答案 0 :(得分:1)
这是因为您的View::share
语句永远不会为其他路由运行。 在Laravel 4.x 中,有很多地方可以将它放在每次运行的地方,但这两个地方最常用:
最简单,最简单的方法是在所有环境的每个请求的 start 的app/start/global.php
末尾添加它。
另一种方法是创建一个新的服务提供商,确保它可自动加载并将其添加到app/config/app.php
的{{1}}数组中。
如果您想要的只是分享一些观点,我会说,为此创建一个全新的课程有点过分。但是,如果您开始注意到providers
文件过于混乱,我建议您开始将内容拆分为服务提供商。
PS:在Laravel 5中,app/start/global.php
已被移除,您只能使用第二个选项。