Symfony 3 - Примечание: unserialize (): ошибка по смещению 11 из 28 байтов - PullRequest
2 голосов
/ 24 апреля 2019

Я не понимаю, я работаю под Symfony 3, и я только что получил сообщение об ошибке, когда хочу перейти на страницу администрирования моего пользователя:

Примечание: unserialize (): ошибка по смещению 11 из 28 байтов

Symfony \ Component \ Debug \ Exception \ ContextErrorException

in vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php (line 58)

Однако, до того, как все заработало очень хорошо, это очень странно. У некоторых других людей уже была такая же проблема, но она никогда не была той же самой причиной.

Я помню, как делал немного пустоты в моих бесполезных файлах моего проекта, но я удалил то, что не использовалось, и прокомментированные блоки, которые я не использовал.

Если это поможет решить мою проблему, вот мой user.php

Спасибо!

РЕДАКТИРОВАТЬ: Хорошо, я просто очень глупо. Моя сущность User наследуется от FOSUserBundle. В моей базе данных был пользователь с ролью SUPER_ADMIN. Тем временем Suaf в своем коде удалил эту роль, оставив только роль ADMIN, и изменил себя в базе данных, удалив слишком много «SUPER». Я не думал, что это создаст такую ​​ошибку, если кто-нибудь сможет объяснить мне, почему, для моей культуры.

Но в любом случае проблема все же решена!

1 Ответ

3 голосов
/ 24 апреля 2019

Это происходит потому, что роли хранятся в виде сериализованного массива, например:

a:1:{i:0;s:16:"ROLE_SUPER_ADMIN";}

Видите это s:16? Это означает, что во время десериализации php будет принимать 16 символов (что в точности равно ROLE_SUPER_ADMIN).

Итак, когда вы удалили SUPER ваши данные стали

a:1:{i:0;s:16:"ROLE_ADMIN";}

и s:16 - это неправильно , потому что теперь у вас есть 10 символов вместо 16 . Но php пытается получить 16, что вызывает ошибку.

Это приводит нас к выводу, что редактирование необработанных данных не очень хорошая идея .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...