WEBcoast Logo

Das Symfony Security User Objekt serialisieren

In einem meiner Projekte nutze ich das VichUploaderBundle. Das Model mit der File-Property ist selbst eine Property der User-Klasse. Das User-Objekt wird im Laufe des Request-Lifecycle deserialisiert und serialisiert. Dadurch bin auch ich in folgenden Fehler gelaufen:

Serialization of 'Symfony\Component\HttpFoundation\File\File' is not allowed

An mehreren Stellen im Internet hieß es, man solle die Methoden `__serialize` und `__unserialize` der User-Klasse überschreiben. Allerdings habe ich nirgendwo heraus gefunden, welche Properties man den braucht. Nach einigen Versuchen bin ich bei der folgenden Lösung angekommen:

<?php

class User implements UserInterface
{
    ...


    /**
     * Return only the security relevant data
     *
     * @return array
     */
    public function __serialize(): array
    {
        return [
            'id' => $this->id,
            'email' => $this->email,
            'password' => $this->password,
        ];
    }

    /**
     * Restore security relevant data
     *
     * @param array $data
     */
    public function __unserialize(array $data): void
    {
        $this->id = $data['id'];
        $this->email = $data['email'];
        $this->password = $data['password'];
    }
}

Vielleicht spart das dem ein oder anderen ein bisschen Zeit. Bei mir kommt Symfony 5 zum Einsatz. Ich gehe aber davon aus, dass dies auch mit Symfony 4 und 6 funktioniert.