Créer un utilisateur administrateur avec FosUserBundle
J'essaie de créer un Utilisateur Admin avec FOsUserBundle de commande de windows avec la commande suivante:
php app/console fos:user:create
Dans mon projet, l'Utilisateur Admin s'étend d'un autre utilisateur avec l'obligation de la bienséance. Donc, quand je choisis mon pseudo, mail et mot de passe, il me dit:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'latitude' cannot be null
Comment puis-je régler la valeur de "latitude" dans mon AdminUser? J'utilise aussi PUGXMultiUserBundle.
source d'informationauteur Gianni Alessandro
Vous devez vous connecter pour publier un commentaire.
Seulement possible de manière à atteindre pour moi, c'est
1 - remplacer la commande cli de
FOSUserBundle
placé dansCommand/CreateUserCommand.php
2 - remplacer l'utilisateur de créer de la méthode de
FOSUserBundle
placé dansUtil/UserManipulator.php
et
Bien sûr, quand je dis remplacer, je veux dire ... remplacer 😛 Si vous n'avez pas à modifier
FOSUserBundle
fichiers originaux (vous savez, c'est dangereux pour de nombreuses raisons), mais de faire vos propres fichiers en faisant de votre faisceau étendu parFOSUserBundle
Vous vous demandez comment faire de votre faisceau étendu par FOSUserBundle?
Dans votre bundle "mainfile" - est celui que vous utilisez pour enregistrer votre bundle - il suffit d'ajouter ces lignes
Ensuite, il vous suffit de recréer la structure de l'arbre où votre ovverride fichiers de vie dans le bundle d'origine, dans votre groupe personnalisé de Ressources/répertoire (même position, le même nom de fichier, même les annotations cas échéant) et .... la magie peut commencer 🙂(ceci est valable uniquement pour les vues, s'il vous plaît prêter attention!)Ce "remplacer"?
Remplacer signifie que vous prenez un existant, de "l'ombre" par la redéfinition ailleurs (déclarer une fonction avec le même nom, n'importe comment beaucoup de paramètres qu'il a accepter, peu importe le type de paramenters depuis php ne supporte pas la surcharge de méthode [sauf si vous faites un peu de "hack"]) et puis vous pouvez l'utiliser à la place de celui d'origine. Cette technique est fréquemment utilisée pour ajouter des fonctionnalités supplémentaires à une fonction ou à modifier la fonction elle-même.
Dire que nous avons deux classes, A et B avec B qui est un enfant de la classe de A. Dire aussi que ont une méthode appelée
myMethod()
.Dans B, on peut faire quelque chose comme
de cette façon, nous allons ajouter des fonctionnalités supplémentaires que nous appelons le parent ("original") la méthode et ensuite exécuter des fonctionnalités supplémentaires
Alors que, si dans B, on peut faire quelque chose comme
fonction publique myMethod() {
//du code ici, mais pas l'appel de méthode parent
}
nous sommes redéfinir le comportement de
myMethod()
Comment Symfony2 permettez-moi de remplacer les méthodes?
Comme je l'ai dit dans ma réponse, vous avez pour faire de votre faisceau d'un enfant du bundle qui contient la fonction(s) que vous essayez de remplacer (dans ce cas
FOSUserBundle
). Une fois que vous l'avez fait,utiliser lereproduire "l'arbre-dossier-structure" de l'original bundle (ie.: même les noms des dossiers) jusqu'à ce que vous atteignez la classe qui contient la fonction dont vous avez besoin pour remplacer.Resources
répertoire de votre faisceau d'accomplir ce que vous avez besoin.Suivre votre exemple concret: vous avez besoin de remplacer
execute()
fonction contenue dansCommand/CreateUserCommand.php
. Vous devez créer dans votre bundle dossier path:et placez-le dans le fichier
CreateUserCommand.php
avec le contenu que je vous montre ci-dessus.Si vous ne comprenez pas où je trouve que le chemin d'accès, veuillez jeter un oeil à
FOSUserBundle
code et il sera tout à fait clair!Pourquoi est dangereux de modifier le FOSUserBundle code directement?
Bien, il y a beaucoup de répondre à une critique que je peux vous montrer. Le choix de la main (sans commande de l'importance):
Enfin: je perfeclty de savoir que votre entité n'est pas en FOSUserBundle, mais je suis prêt à parier qu'ils s'étendent FOSUserBundle de base de l'utilisateur si ce que j'ai dit ci-dessus est applicable à votre cas.
Espère que c'est moins floue maintenant 🙂
Documentation: http://symfony.com/doc/current/cookbook/bundles/inheritance.html#overriding-controllers