cemerson / session
PHP 7 的超简单会话抽象,允许开发者正确模拟与会话相关的代码
v1.2
2023-01-08 20:19 UTC
Requires
- php: ^7.0 | ^8.0
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 和 '魔法' 属性访问方法的样板代码,您只需实现 get
、set
、isset
和 unset
即可。
在测试期间,您可以使用您最喜欢的模拟框架创建 Session
接口的模拟,或甚至使用您最不喜欢的模拟框架来提供您喜欢的任何会话数据。