我在Laravel 4项目中使用“Steam Condenser”软件包。一旦用户登录到我的应用程序,我使用他们的ID(steamId)设置了一个会话。这个ID可以用来抓取各种数据(姓名,头像等),一个例子:Laravel 4 - 全球声明课程?
$steamUser = new SteamId(Session::get('steamId'));
$username = $steamUser->getNickname();
现在这个工作,但是我将要使用在很多页面的这个数据(也包括控制器)。我不希望做的是宣告一个新的类,每次 - 所以我的问题是:
- 可以创建SteamId,所以在我的控制器,我只需要说
$username = $steamUser->getNickname();
- 显然只有(Session::has('steamId'))
是真实的。
我看到这样的方法有两种:
- 通过一个__constructor,但我不能得到这个工作(可怕的失败)。
- 通过路由过滤器。因此,制作一个新的过滤器名称并为每条路线做一个
'before' => 'filter'
。然而,这可能会变得相当过度。
我希望这是有道理的(我的PHP知识不是很好) - 基本上我不想做new SteamId(Session::get('steamId'));
所有的时间!
感谢这工作 - 但有一件事,因为我的应用程序将严重依赖使用$ steamIdObject,是否有可能在BaseController中加载它,所以我可以在每个其他控制器内使用该变量?如果是这样,那么正确的做法是什么? – Alias
你绝对可以。我仍然会使用IoC,但也可以将它添加到基础控制器的构造函数中,如下面答案中所述:) 所以,只需要: $ this-> steamIdObject = App :: make(' SteamId'); 然后在你的控制器中,只需参考$ this-> steamIdObject :) – Oddman
顺便说一句,使用这种方法的好处意味着你的控制器更具可测试性。如果可以,请始终使用IoC对象 - 如果不能,请使用Facades :) – Oddman