cemerson/session

PHP 7 的超简单会话抽象,允许开发者正确模拟与会话相关的代码

v1.2 2023-01-08 20:19 UTC

This package is auto-updated.

Last update: 2024-09-08 23:45:23 UTC


README

您可以使用这个库来帮助测试那些以某种方式依赖会话的应用程序。

原因

单元测试最好与运行它们的环境完全隔离,并且永远不访问该环境的任何部分,例如数据库、文件系统、网络套接字甚至当前时间。

它是故意地超简单,没有任何花哨的东西,只包含足够的内容来实现所需的结果,而不添加任何额外的复杂性。

安装

Session 需要 PHP 7。通过 composer 安装

composer require cemerson/session

使用方法

每当您有一个需要访问会话的类时,不要使用 PHP 中的全局变量 $_SESSION。相反,从这个库中提示并注入 Session 接口,并使用该接口上的方法来操作会话数据。

在生产中,您可以设置您的依赖注入容器来注入提供的 DefaultPHPSession 类以操作默认的 PHP $_SESSION 全局变量。

<?php declare(strict_types = 1);
 
namespace MyVendor\MyApp;
 
use CEmerson\Session\Session;
 
class MyClass
{
    /** @var Session */
    private $session;
    
    public function __construct(Session $session)
    {
        $this->session = $session;
    }
    
    public function myMethodThatNeedsToAccessSessionData()
    {
        $someVar = $this->session->get('varname');
        
        /* ... */
        
        $this->session->set('varname', 'newvalue');
    }
    
    public function youCanAlsoUseArrayAccess()
    {
        $someVar = $this->session['varname'];
        
        /* ... */
        
        $this->session['varname'] = 'newvalue';
    }
    
    public function orEvenPropertyAccessMagicMethods()
    {
        $someVar = $this->session->varname;
        
        /* ... */
        
        $this->session->varname = 'newvalue';
    }
}

或者,如果您需要不同的功能,或者想要创建一个适配器来适配不同的会话库,可以创建自己的 Session 接口实现。提供了一个抽象类,它执行所有实现 ArrayAccess 和 '魔法' 属性访问方法的样板代码,您只需实现 getsetissetunset 即可。

在测试期间,您可以使用您最喜欢的模拟框架创建 Session 接口的模拟,或甚至使用您最不喜欢的模拟框架来提供您喜欢的任何会话数据。