Предупреждение: get_class () ожидает, что параметр 1 будет объектом, задана строка

0

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

Warning: get_class() expects parameter 1 to be object, string given

когда пользователь обращается к странице, на которой вызывается избиратель. Код в избирателе, инициирующий проблему:

public function vote(TokenInterface $token, $object, array $attributes)
{
if (!$object || !$this->supportsClass(get_class($object))) {
    return self::ACCESS_ABSTAIN;
}
...}

когда объект = 'anon.' и это обычный код, взятый с веб-сайта symfony. Я могу, конечно, изменить этот код, чтобы проверить, является ли объект объектом или нет, но мне было интересно, нормально ли это? Я бы предпочел, чтобы избирателя не вызывали на не объект.

EDIT: SuportsClass и SupportsAttribute также являются стандартными:

protected function getSupportedClasses()
{
    return array(
        'AppBundle\Entity\User\Associate',
    );
}

protected function getSupportedAttributes()
{
    return array(self::SELECT_ASSOCIATES, self::GRANT_RIGHTS, self::REMOVE_RIGHT, self::DISPLAY_RIGHTS);
}
  • 0
    Можете ли вы опубликовать свою реализацию supportsAttribute() и supportsClass() ? Мне интересно, если вы правильно проверяете, что объект имеет соответствующий тип там.
Теги:
object
security
symfony-security

1 ответ

1
Лучший ответ

Когда пользователь не вошел в систему, но управление доступом позволяет анонимным пользователям, пользователь представляет собой строку "anon". вместо экземпляра UserInterface.

Вы должны поставить галочку в supportsClass (например, return is_object($objec);).

  • 1
    хорошо, как вы можете видеть в моем коде (код по умолчанию от symfony), suprotsClass задается аргумент класса, поэтому get_class вызывается до того, как проверка может быть выполнена. Поэтому я считаю, что мы просто должны добавить проверку в методе голосования или ограничить маршрут для подключенных пользователей ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню