Bonjour à tous,
Suite à ma découverte de Symfony j'ai voulu créer une application avec users et roles en base de données. J'ai suivi les documentations, docs et autres infos que j'ai pu trouvé à ce sujet.
Actuellement le problème sur lequel je suis tombé est après l'autentification. Lorsque je veux afficher une page j'obtiens ce message d'erreur provoqué par la classe RoleHierarchy:
Call to a member function getRole() on a non-object
Mes classes User et Role fonctionnent bien et sont bien liées entre elles sans souci. Elles possèdent les bonnes interfaces, implémentent les bonnes fonctions.
Ma classe User (en version réduite, j'ai enlevé ce qui n'est pas important):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class User implements UserInterface
{
#region [Attributes]
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="call_sign", type="string", length=100)
*/
private $callSign;
/**
* @var string
*
* @ORM\Column(name="password")
*/
private $password;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
* @ORM\JoinColumn(name="role_id", referencedColumnName="id")
*/
private $roles;
/**
* Get array of string roles
*
* @return array
*/
public function getRoles()
{
return $this->roles;
} |
Et ma classe Role :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| class Role implements RoleInterface
{
#region [Attributes]
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="role", type="string", length=100)
*/
private $role;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
*/
private $users;
#endregion
/**
* @param string $role
*/
public function __construct($role)
{
$this->users = new ArrayCollection();
}
#region [Getters & Setters]
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set role
*
* @param string $role
* @return Role
*/
public function setRole($role)
{
$this->role = $role;
return $this;
}
/**
* Get role
*
* @return string
*/
public function getRole()
{
return $this->role;
} |
J'ai résolu le problème en modifiant la fonction getRoles de ma classe User de cette façon:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| /**
* Get array of string roles
*
* @return array
*/
public function getRoles()
{
$role_name_array = array();
foreach($this->roles as $role)
array_push($role_name_array, $role->getRole());
return $role_name_array;
} |
Bon au final cela fonctionne mais je voulais savoir si j'avais mal fait quelque chose. Le rustinage, ça fonctionne mais c'est moins propre.
Merci d'avance à ceux qui auront répondu !
Partager