2015-07-13 4 views
2

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

Сущности и работает, но когда я пытаюсь войти в меня эту ошибку:

FatalErrorException in RoleHierarchy.php line 43: Error: Call to a member function getRole() on string

Я попытался посмотреть, что это «строка» и это:

array (size=1) 
    0 => string 'Europe/London' (length=13) 

Здесь моя роль лицо:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\Role\RoleInterface; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* Class Role 
* @package AppBundle\Entity 
* 
* @ORM\Entity() 
* @ORM\Table("fxm_role") 
* @ORM\HasLifecycleCallbacks() 
*/ 
class Role implements RoleInterface 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(type="integer") 
* @ORM\Id() 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string $role 
* 
* @ORM\Column(type="string") 
*/ 
private $role; 

/** 
* @var string $name 
* 
* @ORM\Column(type="string") 
*/ 
private $name; 

/** 
* @var \DateTime $created 
* 
* @ORM\Column(type="datetime") 
*/ 
protected $created; 

/** 
* @var \DateTime $updated 
* 
* @ORM\Column(type="datetime") 
*/ 
protected $updated; 

/** 
* @ORM\PrePersist 
* @ORM\PreUpdate 
*/ 
public function updatedTimestamps() 
{ 
    $this->setUpdated(new \DateTime('now')); 

    if ($this->getCreated() == null) { 
     $this->setCreated(new \DateTime('now')); 
    } 
} 

/** 
* Get role 
* 
* @return string 
*/ 
public function getRole() 
{ 
    return $this->role; 
} 

для пользователя здесь является частью используется для роли

/** 
* @var ArrayCollection $roles 
* 
* @ORM\ManyToMany(targetEntity="Role", cascade={"persist"}) 
* @ORM\JoinTable(name="users_roles", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*  ) 
*/ 
protected $roles; 

/** 
* Returns the roles granted to the user. 
* 
* <code> 
* public function getRoles() 
* { 
*  return array('ROLE_USER'); 
* } 
* </code> 
* 
* Alternatively, the roles might be stored on a ``roles`` property, 
* and populated in any number of different ways when the user object 
* is created. 
* 
* @return Role[] The user roles 
*/ 
public function getRoles() 
{ 
    return $this->roles->toArray(); 
} 

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

Иерархия роли нет ничего сложного либо:

role_hierarchy: 
    ROLE_BACKOFFICE: ROLE_USER 
    ROLE_ADMIN: ROLE_BACKOFFICE 

Если кто-нибудь знает, как решить эту проблему, было бы неплохо я застрял на этом уже некоторое время (и есть на самом деле не много документации для роли как объекта).

UPDATE: По какой-то странной причине он работал когда-то дал мне Role массив

array (size=1) 
    0 => 
    object(AppBundle\Entity\Role)[437] 
     private 'id' => int 1 
     private 'role' => string 'ROLE_BACKOFFICE' (length=15) 
     private 'name' => string 'Back Office' (length=11) 
     protected 'created' => 
     object(DateTime)[370] 
      public 'date' => string '2015-07-13 11:43:31.000000' (length=26) 
      public 'timezone_type' => int 3 
      public 'timezone' => string 'Europe/London' (length=13) 
     protected 'updated' => 
     object(DateTime)[365] 
      public 'date' => string '2015-07-13 11:43:31.000000' (length=26) 
      public 'timezone_type' => int 3 
      public 'timezone' => string 'Europe/London' (length=13) 

Но не удалось после того, как я обновил страницу. Таким образом, существует странное несоответствие здесь происходит

ответ

0

После некоторых исследований и некоторые тесты, это выглядит, как этот вопрос относится к одному с PHP 5.4 даже если я на PHP 5.6 (RoleInterface throws "call on a non-object" error)

Я попытался изменить процесс сериализации с помощью функции JSON, и проблема теперь исчезла. Итак, на данный момент serialize и unserialize создают проблему, но я не знаю почему.

Смежные вопросы