当我在项目中使用session时,我有点困惑。当我使用它时,它显示两种类型的会话
1. use Symfony\Component\HttpFoundation\Session\Session
2. use Illuminate\Support\Facades\Session
这两者有什么区别?我在哪里/如何使用这些,或者我可以同时使用这两个? 感谢。
答案 0 :(得分:1)
使用Illuminate\Support\Facades\Session
时,您使用的是Facade。
什么是Facade? strong>
简而言之,Facade为您提供了一个非常静态的界面,可以与Laravel进行交互。而不是实例化一个类,传递所有依赖项等,而是使用Facade,在幕后,Laravel将负责实例化该类并解决IoC容器中的任何依赖项。
请参阅Laravel文档中的How Facades Work。
Illuminate\Support\Facades\Session
文件就是这样:
<?php
namespace Illuminate\Support\Facades;
/**
* @see \Illuminate\Session\SessionManager
* @see \Illuminate\Session\Store
*/
class Session extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'session';
}
}
查看它返回的session
字符串? Laravel将采用它并在其IoC容器中搜索具体实现,在本例中为Symfony\Component\HttpFoundation\Session\Session
类的实例;
总结
您可以使用其中一种。
如果你想使用Symfony\Component\HttpFoundation\Session\Session
,你必须在构造函数中注入它或者新建它并传递它的所有依赖项。
如果你选择Illuminate\Support\Facades\Session
,只需调用静态方法就可以了。
小记:有些人认为外墙是一个糟糕的设计模式,但这是一场完全不同的战斗,最终由你来决定是否使用它们。
答案 1 :(得分:0)
Facades为应用程序服务容器中可用的类提供“静态”接口。
这意味着,Facade是专门为Laravel设计的包装类,它提供对父类的简单和Laravel一致访问。此外,外观被插入到应用程序的服务容器中,这确保了外观仅加载一次,因此它可以在整个应用程序中作为同一实例使用。
当您使用的是Laravel门面时,使用立面是最简单的方法。
docs很好地解释了这个功能,所以你应该看一下它。