2014-12-21 2 views
0

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

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

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

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

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

EDIT:

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

Можете ли вы опубликовать свою реализацию 'supportAttribute()' и 'supportClass()'? Мне интересно, правильно ли вы проверяете, что объект имеет соответствующий тип. –

ответ

1

Когда пользователь не вошел в систему, но контроль доступа позволяет анонимным пользователям, пользователь является строка: SuportsClass и SupportsAttribute также те, по умолчанию «Анон.» вместо экземпляра UserInterface.

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

+0

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