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,如何放置共享变量,如何确保所有视图都可以访问它,如何访问变量?我看了整个文档,但没有找到使用文档。非常感谢。