Symfony2.1 + sonata-admin + sonata-user +fos-userbundle [FR]

Symfony2.1 + sonata-admin + sonata-user +fos-userbundle [FR]

Salut à vous, aujourd’hui nous allons voir comment installer Symfony2.1 et les bundles suivants:

  • FOSUserBundle
  • SonataAdminBundle
  • SonataUserBundle

La première étape est bien entendu la création du projet à l’aide de la commande suivante:

composer create-project symfony/framework-standard-edition sonataadmin.fr

Éditez le fichier composer.json pour y rajouter les bundles suivants :

Mettez à jour votre fichier AppKernel.php avec les bundles suivants :

Modifier votre fichier config.yml afin d’activer la traduction

Dans votre fichier config.yml rajoutez le contenu suivant:

Ensuite au tour du security.yml:

A l’aide de la commande suivante : app/console sonata:easy-extends:generate SonataUserBundle nous allons généré la partie admin pour les utilisateurs. Le code généré se trouve dans le dossier app, déplacez le dans le dossier src.

Une fois fait, ajoutez le nouveau bundle dans le fichier AppKernel.php.

Mettez alors a jour les deux entités avec les annotations @ORM.

Nous devons ensuite ajouter le support du json a doctrine avec le code suivant dans le fichier config.yml.

Une fois fait, il nous faut créé ou mettre à jour la base données. En fonction de votre besoin, utilisez l’une ou l’autre de ces commandes:

app/console doctrine:schema:create pour la création

app/console doctrine:schema:update --force pour la mise à jour

S’en suis l’installation des assets avec app/console assets:install web

Afin de pouvoir accéder à notre espace admin il faut importer les routes dans le fichier routing.yml

Dernière étape, la création du premier utilisateur avec la commande suivante:

app/console fos:user:create admintest admin@test.com pass --super-admin

Rendez-vous alors sur http://sonataadmin.fr.dev/admin/dashboard puis connectez-vous avec l’utilisateur précédemment créé. Vous devriez alors avoir le dashboard suivant :

Dans un prochain article, nous verrons comment ajouter des éléments au générateur.

P.S. un dépôt github est disponible a l’adresse suivante : https://github.com/dayofr/sonataadmin.fr

44 thoughts on “Symfony2.1 + sonata-admin + sonata-user +fos-userbundle [FR]

    1. i think if you just follow the configurations, commands and the routing you dont need to read other text. also there is a sonata sandbox pre configured by sonata team inluding almost all big sonata bundles including most popular FOSUserBundle. i will recommend you try it. you can remove bundles an config you dont want quite easily

  1. Bonsoir,

    J’ai suivi votre post à la lettre 🙂 mais j’ai cependant un soucis.
    J’arrive à accéder à l’url mon_host/web/app_dev.php/admin/dashboard, après connexion cependant j’ai toujours un soucis pour ajouter un user, ou un group.

    Fatal error: Call to a member function setLenient() on a non-object in ….vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php on line 80
    Cette erreur est presente quand l’extension intl est activée sur mon serveur

    Et quand cette extension n’est pas activée j’ai cette erreur :
    Fatal error: Class ‘ResourceBundle’ not found in …\vendor\symfony\symfony\src\Symfony\Component\Locale\Locale.php on line 157

    Avez vous déjà rencontré ce souci ?

    Merci par avance

    1. Bonjour,

      J’ai regardé le fichier DateType.php, à la ligne 80 il y a un appel à une méthode sur une instance d’un objet de type IntlDateFormatter, il semblerais que cette objet n’existe que si la version de php est supérieur a 5.3.0 et intl supérieur a 1.0.0 qu’elles sont vos versions de php et intl?

      Est-ce que dans votre php.ini la directive date.timezone est défini ? date.timezone = « Europe/Paris » par exemple.

  2. Bonsoir,

    J’ai exécuter la commande : php app/check.php pour vérifier l’installation de mon serveur

    OK PHP version must be at least 5.3.3 (5.3.10 installed)

    cependant il semblerait que malgré l’activation de l’extension dans php.ini
    ;extension=php_gmp.dll
    extension=php_intl.dll ; ligne dé commentée

    WARNING intl extension should be available
    Install and enable the intl extension (used for validators).

    Symfony ne le prenne pas comme activé… je vais donc regarder de ce côté la et je vous tiens au courant.
    Mais si vous pensez à autre chose, je suis preneur
    Merci beaucoup

    1. Alors c’est un peu bizarre j’ai refait des modifications dans php.ini avec une nouvelle install de wamp,
      php app/check.php ne détecte toujours pas l’extension intl cependant l’erreur a changé
      J’ai à présent :

      Warning: IntlDateFormatter::format() [intldateformatter.format]: datefmt_format: takes either an array or an integer timestamp value or a DateTime object in E:\Developpement\www\sf25\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php line 269
      500 Internal Server Error – ErrorException

      Toujours un problème de intl 🙁
      Une information ?

      1. Salut !

        En fait, quand le php.ini utilisé par php en ligne de commande est un fichier différent du php.ini utilisé par Apache. Du coup, si tu visites /web/config.php ou si tu fais php app/check.php, tu peux très bien avoir des résultats différents. En l’occurence, il semble que tu as activé phpintl pour l’un mais pas pour l’autre.

        Sinon, pour résoudre ton erreur 500, je suppose qu’il te suffit de :

        1/ ajouter « sonata-project/intl-bundle »: « dev-master » à ton composer.json
        2/ composer.phar update
        3/ charger SonataIntlBundle dans AppKernel.php : new Sonata\IntlBundle\SonataIntlBundle(),

        1. Bonjour,
          Désolé pour le retard de réponse

          Merci pour tes explications, j’ai effectivement fini par trouvé, et c’était bien un problème de configuration d’apache 🙂

          Merci en tout cas

  3. salut ! j’aurais aimer voir cette solution moi aussi !
    car je suis bloqué au même point :
    Warning: IntlDateFormatter::format(): datefmt_format: takes either an array or an integer timestamp value or a DateTime object

    1. re-bonsoir ! alors j’ai activé le module apache « authn_dbm » pour éviter l’erreur à la création d’utilisateur par le dashboard
      par contre j’ai un autre probleme, c’est pour afficher le profil de l’utilisateur :
      "Warning: nl2br() expects parameter 1 to be string, object given in /home/cedric/workspace/jamonce/app/cache/dev/twig/72/4e/dcec6119a36ca779584f76a7796f.php line 45") in "SonataAdminBundle:CRUD:show.html.twig"
      je repart donc en quête demain. 3h dodo

  4. Bonjour,

    Après la seconde étape où nous devons ajouter les lignes au fichier composer.json, je fais un « php composer update » (qui n’est pas indiqué dans ton tuto). Malheureusement, j’ai un tas d’erreurs. L’update ne se fait pas.

    Désolé pour le pavé mais voici le résultat de la commande :
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.

    Problem 1
    – Installation request for sonata-project/admin-bundle dev-master -> satisfiable by sonata-project/admin-bundle dev-master.
    – sonata-project/admin-bundle dev-master requires sonata-project/block-bundle 2.2.*@dev -> no matching package found.
    Problem 2
    – Installation request for sonata-project/doctrine-orm-admin-bundle dev-master -> satisfiable by sonata-project/doctrine-orm-admin-bundle dev-master.
    – sonata-project/doctrine-orm-admin-bundle dev-master requires sonata-project/block-bundle 2.2.*@dev -> no matching package found.
    Problem 3
    – sonata-project/admin-bundle 2.2.x-dev requires sonata-project/block-bundle 2.2.*@dev -> no matching package found.
    – sonata-project/user-bundle dev-master requires sonata-project/admin-bundle >=2.2-dev, satisfiable by sonata-project/admin-bundle 2.2.x-dev.
    – Installation request for sonata-project/user-bundle dev-master -> satisfiable by sonata-project/user-bundle dev-master.

    Potential causes:
    – A typo in the package name
    – The package is not available in a stable-enough version according to your minimum-stability setting
    see for more details.

    Read for further common problems.

    Comment puis-je y remédier ?
    Je suis novice sur l’installation de bundles, il y a peut-être quelque-chose qui m’a échappé.

    Merci d’avance.

  5. Bonjour,

    Me revoici avec un nouveau problème. J’espère que le temps perdu à installer ces bundles me feront gagner du temps sur le développement 🙂

    Maintenant que j’ai modifié les fichiers de config et de sécurité, j’ai exécuté la commande « $ php app/console sonata:easy-extends:generate SonataUserBundle ». Voici l’erreur qui m’est retournée :

    [Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
    Unrecognized options « fragments » under « framework »

    J’ai vu que l’erreur pouvait venir soit du config.yml soit du UPGRADE-2.2.md. Je ne sais pas comment marche la commande exécutée …

    Qui saurait m’éclairer ?

    Merci.

      1. Bonjour guizme555,

        J’ai supprimé la ligne dans config.yml (il me semble que c’est ce fichier) qui définit « fragment » et ça passe 😉
        Concernant les conséquences de cette suppression, je ne sais pas du tout ce que ça donne.

        1. Hello,
          Bon je n’ai pas eu besoin de supprimer quoique ce soit. J’ai tout repris proprement depuis le début, bataillé avec mon fichier composer.json (afin d’être sur la version 2.2 de symfony) et c’est désormais OK. Au besoin, je peux te le donner. Merci pour ta réponse en tout cas !

  6. Bonjour, j’ai un soucis, après avoir suivi la procédure d’installation je suis tombé sur l’erreur:

    ParameterNotFoundException: You have requested a non-existent parameter « twig.form.resources ».
    in C:\wamp\www\GenericTesting\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.php line 96
    at ParameterBag->get(‘twig.form.resources’) in C:\wamp\www\GenericTesting\app\bootstrap.php.cache line 151
    at Container->getParameter(‘twig.form.resources’) in C:\wamp\www\GenericTesting\vendor\sonata-project\user-bundle\Sonata\UserBundle\DependencyInjection\SonataUserExtension.php line 60
    at SonataUserExtension->load(array(array()), object(ContainerBuilder)) in C:\wamp\www\GenericTesting\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass.php line 42
    at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in C:\wamp\www\GenericTesting\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass.php line 39
    at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in C:\wamp\www\GenericTesting\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\Compiler.php line 119
    at Compiler->compile(object(ContainerBuilder)) in C:\wamp\www\GenericTesting\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\ContainerBuilder.php line 458
    at ContainerBuilder->compile() in C:\wamp\www\GenericTesting\app\bootstrap.php.cache line 952
    at Kernel->buildContainer() in C:\wamp\www\GenericTesting\app\bootstrap.php.cache line 861
    at Kernel->initializeContainer() in C:\wamp\www\GenericTesting\app\bootstrap.php.cache line 573
    at Kernel->boot() in C:\wamp\www\GenericTesting\app\bootstrap.php.cache line 616
    at Kernel->handle(object(Request)) in C:\wamp\www\GenericTesting\web\app_dev.php line 26

    j’ai essayé de remplir dans le parameter.yml mais je ne sais pas quel valeur mettre… cela fait deux jour que j’ai le problème…
    twig.form.resources: []

    pourriez vous m’aider?

    1. J’interprète peut-être mal l’exception retournée, mais à mon avis il signifie que le paramètre de config n’existe simplement pas, et qu’il faut donc le supprimer.

  7. j’ai un probleme pour l’ajout d’un user

    FatalErrorException: Error: Class ‘ResourceBundle’ not found in C:\wamp\www\ProjetFinEtudes\paploc.tn\vendor\symfony\symfony\src\Symfony\Component\Locale\Locale.php line 159

      1. En fait, j’ai résolu le problème grâce aux posts de Morgan.
        Il faut installé l’extension PHP intl.
        Sur Debian ou Ubuntu il suffit d’entrer la commande : sudo apt-get install php5-intl
        Et apparemment il faut aussi que la version de PHP soit supérieure à 5.3 (mais c’était déjà le cas pour mois)

  8. Salut, tout d’abord merci pour ce tuto, intérréssant et très bien conçu.

    Mon problème arrive à la fin du tutorial, je tape mon url/admin/dashboard mais j’obtiens une erreur 404, pourtant quand je fais « app/console router:debug » ma route existe :

    sonata_admin_dashboard ANY /admin/dashboard

    Aurait tu une idée ?

    1. Bon, c’est corrigé en fait il n’y a aucun problème, il faut juste ne pas oublier de passer par app_dev.php/admin/dashboard, une petite précision dans le tuto serait pas de trop vu que sur le screen ça porte à confusion.

      Merci encore pour ce tuto

  9. Bonjour désolé pour le temps de réponse mais non j’ai déja essayé en mettant un paramètre vide et cela ne marche pas. Je suis sur un autre sujet mais je te retourne l’erreur des que je me remets dessus. il me sortais un truc du genre: not able to find fields.html.twig. ou un autre fichier de template qu’il n’arrivait pas à trouver…

  10. ah oui et quand je défini un parametre dans twig.resources il y a quand même un bug come quoi il y a un problème de template… C’est assez étrange

  11. Merci beaucoup pour ce tuto, après avoir galéré pour installer l’extension php_intl (j’avais zappé qu’il y avait 2 php.ini), l’installation de Sonata s’est faite sans trop de soucis !!

    Bye 😉

  12. Tout abord Merci Beaucoup pour ce tuto qui m’a été très utile,
    Je voulais savoir si c’était possible de faire un CRUD (Create, Read, Update, Delete) pour administrer les Rôle?

    Merci

    1. Salut,

      Je viens de mettre à jour mon dépot GitHub avec Symfony 2.3 et la dernière version de sonata.
      Lors de mes tests j’ai vu que les rôles d’un utilisateur sont modifiable depuis l’interface.

      Si tu rajouter un nouveau rôle, il faut par contre le rajouter dans ton fichier config.yml.

  13. Bonjour ! Tout d’abord merci pour ton tuto, ça a fonctionner nickel même en dernière version.
    Après juste pour savoir si tu as fais quelque chose du genre, normalement comme on utilise Sonata-User on doit pouvoir accéder à la page [app_dev.php/]login.php. De base cette dernière est hideuse, as-tu réussi à changer son template ? Si oui peux-tu me donner des pistes ? merci bien !

    1. Soit tu as oublié de app/console assets:install web, soit tu devrais plutôt faire un log-out puis te rendre sur /admin/login pour voir le template utilisé.

  14. A propos du bug « Warning: IntlDateFormatter::format(): datefmt_format: takes either an array or an integer timestamp value or a DateTime object ».

    Si l’extension est activé, et que le problème persiste alors le problème vient du fait que une version 32bits de PHP est utilisé.
    Du coup, impossible d’utiliser une date antérieur à 1901. Or Symfony2, par défaut, calcul une date, 120ans avant la date d’aujourd’hui pour les champs de type « birthday » => d’où cette erreur quand on essaye d’ajouter (ou éditer) un utilisateur !

    Quelques Solution(s) :

    1) Passer en 64bits
    2) Attendre ce patch (ou faire l’édition manuellement en attendant) : https://github.com/symfony/symfony/pull/9314

  15. Hello, très bon tuto merci à toi, juste un petit truc lorsque je connecte mon admin sur mon site (front) et que je vais ensuite dans la partie admin (back) je suis obligé de m’identifier à nouveau via ton formulaire d’identification et je vois pas trop pourquoi.
    Si tu pouvais juste m’expliquer vite fais ce que je dois regarder pour changer ça, je te remercie d’avance.

  16. Bonjour et merci pour ce tutoriel.
    Toutefois , je rencontre un soucis au niveau de l’administration des rôles.
    Je m’explique lors de l’édition/création d’un groupe par exemple , mon champ roles est juste composé d’un label en gras Roles ,
    alors que dans mon fichier security.yml je possède bien des roles dans roles hiérarchy :

    role_hierarchy:
    ROLE_ADMIN: ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ROLE_DAYO]
    SONATA:
    – ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT

    Pourrais tu m’éclairer ? thanks

  17. Seems cool, thanks for this tutorial (:

    I have a issue while calling « app/console sonata:easy-extends:generate SonataUserBundle » :
    ParameterNotFoundException: You have requested a non-existent parameter « templating.engines ».

    Please I really need help.

    1. I fixed this !

      But I have another problem when I want to update a member I can’t go to Groups or Profile dongle (les onglet), comment y remédier ?

      Super tuto (:

Laisser un commentaire