oliver-hader/session-service

TYPO3 Extbase会话与前端用户服务

安装: 111

依赖者: 0

建议者: 0

安全性: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:typo3-cms-extension

v1.1.2 2019-12-09 21:45 UTC

This package is auto-updated.

Last update: 2024-09-10 10:05:29 UTC


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 的异常。