Facades \ Session和HttpFoundation \ Session

时间:2016-12-11 16:57:17

标签: laravel laravel-5 laravel-5.2

当我在项目中使用session时,我有点困惑。当我使用它时,它显示两种类型的会话

1. use Symfony\Component\HttpFoundation\Session\Session
2. use Illuminate\Support\Facades\Session

这两者有什么区别?我在哪里/如何使用这些,或者我可以同时使用这两个? 感谢。

2 个答案:

答案 0 :(得分:1)

使用Illuminate\Support\Facades\Session时,您使用的是Facade。

什么是Facade?

简而言之,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很好地解释了这个功能,所以你应该看一下它。