#php #symfony #doctrine-orm #uuid
#php #symfony #doctrine-orm #uuid
Вопрос:
Я обновил приложение symfony с 4.0 до 4.4, все работает нормально, за исключением того, что при входе в панель управления ma я получаю эту ошибку Could not convert database value "11ea3053-6c85-df5a-a..." to Doctrine Type uuid_binary_ordered_time. Expected format: UuidV1
если я понизил ramsey/uuid-doctrine
версию, все работает нормально.
Текущая версия Symfony 4.4
Тот же пользователь может войти в систему с помощью rest API с базовой авторизацией. Вот мой параметр id, в User.php
котором используется UUID. Заранее спасибо.
/**
* @var Uuid
*
* @ORMId
* @ORMColumn(type="uuid_binary_ordered_time", unique=true)
* @ORMGeneratedValue(strategy="CUSTOM")
* @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidOrderedTimeGenerator")
*/
protected $id;
/**
* @return string
*/
public function getId()
{
return $this->id->getHex();
}
Ответ №1:
итак, я нашел решение вышеуказанной проблемы. на самом деле проблема была с сериализацией и десериализацией symfony. Все работает нормально, за исключением входа в панель администратора, которая использует сеанс для хранения пользовательских данных, переопределяет метод сериализации и десериализации безопасности User Class User.php
, и все работает нормально.
Главное, что во время сериализации я должен преобразовать свой uuid в string, а во время десериализации я должен преобразовать обратно строковый uuid. вот код в моем User.php
классе сущностей.
public function serialize()
{
return serialize(array(
$this->password,
$this->salt,
$this->usernameCanonical,
$this->username,
$this->enabled,
$this->id->toString(),
$this->email,
$this->emailCanonical,
));
}
public function unserialize($serialized)
{
$data = unserialize($serialized);
if (13 === count($data)) {
// Unserializing a User object from 1.3.x
unset($data[4], $data[5], $data[6], $data[9], $data[10]);
$data = array_values($data);
} elseif (11 === count($data)) {
// Unserializing a User from a dev version somewhere between 2.0-alpha3 and 2.0-beta1
unset($data[4], $data[7], $data[8]);
$data = array_values($data);
}
$data[5] = UuidV1::fromString($data[5]);
list(
$this->password,
$this->salt,
$this->usernameCanonical,
$this->username,
$this->enabled,
$this->id,
$this->email,
$this->emailCanonical
) = $data;
}