oliver-hader / session-service
TYPO3 Extbase会话与前端用户服务
v1.1.2
2019-12-09 21:45 UTC
Requires
- php: ^7.2
- ext-json: *
- typo3/cms-core: ^9.5
README
此扩展仅是一个辅助工具,目前处于 实验性 状态。
域建模
要关联到现有 FrontendUser
实体的 Extbase 域实体需要具有类型为 \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
(或此模型的任何子类)的专用属性。
在以下示例中,Customer
是基于网站前端用户要解决的实体。
class Customer extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { /** * Frontend User * * @var \TYPO3\CMS\Extbase\Domain\Model\FrontendUser */ protected $user;
解决实体主题
为了根据当前登录的前端用户解决类型为 Customer
的主题,会话服务辅助工具提供了以下 API
$currentCustomer = SubjectResolver::get() ->forClassName(Customer::class) ->forPropertyName('user') ->resolve();
如果没有前端用户登录或无法将其映射到主题,则会抛出类型为 InvalidSessionException
的异常。如果解决的主题超过一个,则会抛出 SubjectException
。
解决前端用户实体
为了解决与当前登录的前端用户相关联的 Extbase 实体(或子类),提供了以下 API
$frontendUser = FrontendUserResolver::get() ->forClassName(\TYPO3\CMS\Extbase\Domain\Model\FrontendUser::class) ->resolve();
使用会话主题集合
SubjectCollection
继承自 \ArrayObject
,因此可以像在 PHP 中使用数组一样使用它。如果会话中存在用于强制 scope
(以下示例中的 project/shopping-cart
)的项,则这些项将自动从会话存储中解决。
/** @var $entity \TYPO3\CMS\Extbase\DomainObject\AbstractEntity */ $entity = $this->entityRepository->findByIdentifier(123); $collection = SubjectCollection::get('project/shopping-cart'); $collection[] = $entity; $collection->persist();
如果没有前端用户登录或无法将其映射到主题,则会抛出类型为 InvalidSessionException
的异常。