Extbase - сохранение доменных объектов в сеансе TYPO3 - PullRequest
0 голосов
/ 08 ноября 2019

Обычно можно поместить любой объект домена в сессию ($ GLOBALS ['TSFE'] -> fe_user), поскольку они автоматически сериализуются и десериализуются правильно. Но в некоторых случаях это терпит неудачу (я полагаю, что вызванные круговыми ссылками или сериализованными данными превышает предел поля BLOB-объекта базы данных).

Я нашел лучший подход, преобразовывая доменные объекты в целочисленные «идентификаторы» при сериализации. и получение реальных доменных объектов из репозитория при десериализации:

class PutMeIntoSession implements \Serializable {

    protected $project = null;

    public function getProject() {
        return $this->project;
    }

    public function setProject(\Vendor\Ext\Domain\Model\Project $project = NULL) {
        $this->project = $project;
    }

    public function serialize() {
        $serialized = serialize(array(
            'project' =>  $this->project ? $this->project->getUid() : 0
        ));
        return $serialized;
    }

    public function unserialize($serialized) {
        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
        $unserialized = unserialize($serialized);
        $this->project = $objectManager->get(ProjectRepository::class)->findByUid($unserialized['project']);
    }

}

Кажется, это работает нормально. Но я не знаю, есть ли более разумные способы добиться этого или есть какие-то возможные проблемы с моим подходом?

...