Bonjour,
j'ai intégré le bundle easy Admin sous Symfony
https://symfony.com/doc/master/bundles/EasyAdminBundle/index.html
Il fonctionne, le soucis est que j'aimerais que les seules qui aient accès à cette interface soit les utilisateurs qui ont un rôle admin déclaré donc j'ai ajouté ça a mon security.yaml- { path: ^/admin, roles: ROLE_ADMIN }
Dans mon entité utilisateur voila ce que j'ai
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}Il retourne les rôles dans un array ce qui me vaut l'erreur
Object of class App\Entity\User could not be converted to string
EasyAdmin n'accepte pas mon rôle déclaré en array donc j'essaye d'inclure la fonction __toString()
public function __toString()
{
return $this->roles;
}
Et je me tapes l'erreur
Method App\Entity\User::__toString() must return a string value
Je ne comprends pas ou ça coince la seule variable en array étant le $roles, même avec la fonction toString() ça ne marche pas ![]()
J'ai aussi remarqué que l'utilisateur créé avait toujours comme propriété ce qui me semble être un array dans la console symfony

Sachant que avoir une double propriété est inévitable vu que ROLE_USER est défini dès la création d'un compte
Merci pour ceux qui ont lu, j'ai bien essayé de poser la question sur OpenClassrooms mais personne ne m'a répondu ![]()
tu as un array, c'est un array
une chaine est aussi un array mais particulier
Mais ton array roles n'est pas considérer comme une chaine.
Visiblement tu te lance sans avoir les bases
De ce que j'ai compris un array est un tableau, il sert à associer plusieurs valeurs
J'ai besoin d'une chaîne pour authentifier sous Easy Admin
La fonction __toString() me permet de récupérer la variable de ma valeur roles qui est au format tableau puis de la mettre au format chaine de caractères pour permettre son utilisation sous Easy Admin
Donc effectivement à partir de ce que je sais, je ne sais pas où ça coince car tout semble concorder
J'ai essayé de faire le contraire c'est à dire de mettre ma variable roles en chaîne plutôt qu'en tableau
ça marche correctement avec Easy Admin, mais le soucis c'est que tout le reste de mon site récupère la variable en array et ne fonctionne plus donc je ne peut pas me permettre de laisser la variable $roles en chaîne de caractère ![]()
Je me suis relu et c'est vrai que je me suis mal exprimé
Je sais que mon array roles n'est pas considéré comme une chaine
Sous symfony j'ai une fonction qui transforme les variables de type array en donnant une chaîne à la sortie
C'est la fameuse fonction __toString() or ça ne fonctionne pas dans mon cas car j'ai dût faire une erreur quelque part
Comme je l'ai dit si je transforme ma variable roles en chaine dans ma BDD ça fonctionne, mais le reste de mon site identifie roles sous un array ![]()
C'est pas magique, c'est les bases
Si tu comprends pas ça et que tu utilise déjà Symfony ça va être coton !
ta fonction je le répété renvoie un array pas une chaîne !
ta fonction to string ne fais rien de plus que ton getRoles()
Je pensais que c'était une méthode qui appelait d'autres fichiers car sur les forums anglophones ils réglaient leur soucis en ajoutant la fonction __toString() comme je l'ai mise en haut.
Bon j'ai compris que c'était pas magique donc j'ai cherché sur la docu PHP et j'ai trouvé la bonne fonction que j'ai mise dans mon code
public function __toString()
{
implode ( $roles );
}
La fonction implode transforme mon array en string, j'ai bien mon ROLE_ADMIN authentifié sur l'espace Easy Admin
Pas de soucis sur le reste du site
Par contre il va falloir que j'implémente une fonction similaire à mes entités si je veut pouvoir les éditer dans Easy Admin
un petit coup de poussereturn json_encode($monArraydeData);
sous symfony tu as même un sérialiser pour ça !
Merci, j'ai encore beaucoup de choses à apprendre
Si à la base t'as l'erreur Object of class App\Entity\User could not be converted to string c'est qu'easyAdmin essaye d'afficher un objet User.
Sauf que de base tu ne peux pas faire un echo $object;.
Pour palier à ça on peut implémenter la fonction toString(), le principe de cette fonction est qu'elle doit toujours retourner une chaîne de caractère (qui va "représenter" l'objet).
Ensuite quand tu feras un echo de ton objet, c'est la valeur de toString() qui sera affichée et tu n'auras plus d'erreur.
Du coup dans ta classe User tu devrais plutôt faire en sorte que toString() retourne quelque chose comme les nom et prénom de l'utilisateur.
Le but est d'afficher toutes les variables d'une entité dans le but de les éditer/supprimer
De ce fait je dois tout inclure mais à la prochaine bdd je ferais gaffe à ce que cela soit bien compatible
Le 09 mai 2020 à 19:33:50 fanof_banni a écrit :
Si à la base t'as l'erreurObject of class App\Entity\User could not be converted to stringc'est qu'easyAdmin essaye d'afficher un objet User.
Sauf que de base tu ne peux pas faire unecho $object;.
Pour palier à ça on peut implémenter la fonctiontoString(), le principe de cette fonction est qu'elle doit toujours retourner une chaîne de caractère (qui va "représenter" l'objet).
Ensuite quand tu feras un echo de ton objet, c'est la valeur detoString()qui sera affichée et tu n'auras plus d'erreur.
Du coup dans ta classeUsertu devrais plutôt faire en sorte quetoString()retourne quelque chose comme les nom et prénom de l'utilisateur.
je suis pas sur que ce soit le problème.
J'ai souvent constaté que ce genre de bundle c'étais un peux de la merde complexe pour pas grand chose apres avoir essayé API Platforme .
En plus ça demande une grosse connaissance du Famework et du fonctionnement du bundle .
Je connais pas le projet de l'auteur, mais il devrais abandonner sont projet symfony pour du full vanilla.
ou faire une bonne formation en algo, puiis PHP et Symfony
Ton erreur n'a rien avoir avec ta problématique de rôles. Ta méthode `getRoles` me paraît correct bien que ça puisse être discuté.
`Object of class App\Entity\User could not be converted to string` indique l'utilisation d'une instance de `App\Entity\User` comme une chaîne de caractères pose souci. En effet, l'interpréteur ne sait pas comment rendre cette instance sur la forme d'une chaîne de caractères. En implémentant la méthode `__toString`, tu décides de la manière de rendre ton objet sous forme de chaîne de caractères.
Concrètement, tu dois définir ce que tu veux voir écrit si tu fais un `echo $user`. En général, on va imprimer le nom d'utilisateur et/ou l'email, voir sur identifiant.
Exemple :
public function __toString()
{
return $this->id.' '.$this->username.' ('.$this->email.')';
}
Le 09 mai 2020 à 20:53:05 deepblue a écrit :
Ton erreur n'a rien avoir avec ta problématique de rôles. Ta méthode `getRoles` me paraît correct bien que ça puisse être discuté.`Object of class App\Entity\User could not be converted to string` indique l'utilisation d'une instance de `App\Entity\User` comme une chaîne de caractères pose souci. En effet, l'interpréteur ne sait pas comment rendre cette instance sur la forme d'une chaîne de caractères. En implémentant la méthode `__toString`, tu décides de la manière de rendre ton objet sous forme de chaîne de caractères.
Concrètement, tu dois définir ce que tu veux voir écrit si tu fais un `echo $user`. En général, on va imprimer le nom d'utilisateur et/ou l'email, voir sur identifiant.
Exemple :
public function __toString() { return $this->id.' '.$this->username.' ('.$this->email.')'; }
Le soucis est que Easy Admin me prends toutes mes variables, même si je configure le fichier .yaml pour qu'il n'affiche qu'une seule variable, il va quand même sonder toute l'entité et s'arrêter dès la seule variable qui n'est pas une chaîne.
Pour les articles de mon site par exemple, la catégorie d'un article repose sur une variable $id de type integer, l'entité category est lié à l'entité article, si avec easy admin je veut gérer le contenu de mes articles je suis obligé de transformer la variable $id de mon entité category avec ça
/**
* Transform to string
*
* @return string
*/
public function __toString()
{
return (string) $this->getId();
}Sinon je me retrouve avec une erreur Object of class App\Entity\Category could not be converted to string alors que j'essaye juste de modifier le $content de mon entité article
C'est peut être idiot de se lancer sur Symfony avec des lacunes en PHP mais je trouve que c'est très enrichissant