IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[SonataAdminBundle] « Call to a member function isGranted() on a non-object » après l'installation [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Par défaut [SonataAdminBundle] « Call to a member function isGranted() on a non-object » après l'installation
    Bonjour,

    Bon je suis un peu perdu dans l'installation et la configuration de Sonata Admin Generator.

    Je travaille sur un serveur debian. Symfony 2.1. Je précise que j'ai une bonne expérience de php en général.. Mais je découvre Symfony !

    J'ai donc utilisé le composer.phar pour installer les bundles pré-requis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		"friendsofsymfony/user-bundle": "*",
    		"sonata-project/admin-bundle": "*",
    		"sonata-project/user-bundle": "*",
    		"sonata-project/doctrine-orm-admin-bundle": "dev-master"

    j'ai ajouté ca dans mon config.yml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    sonata_block:
        default_contexts: [cms]
        blocks:
            sonata.admin.block.admin_list:
                contexts:   [admin]
            sonata.block.service.text:
            sonata.block.service.rss:
    sonata_admin:
        security:
            handler: sonata.admin.security.handler.noop
        title:      Sonata Project
        title_logo: /bundles/sonataadmin/logo_title.png
        templates:
            # default global templates
            layout:  SonataAdminBundle::standard_layout.html.twig
            ajax:    SonataAdminBundle::ajax_layout.html.twig
     
            # default actions templates, should extend a global templates
            list:    SonataAdminBundle:CRUD:list.html.twig
            show:    SonataAdminBundle:CRUD:show.html.twig
            edit:    SonataAdminBundle:CRUD:edit.html.twig
        dashboard:
            blocks:
                # display a dashboard block
                - { position: left, type: sonata.admin.block.admin_list }
                # Customize this part to add new block configuration
                - { position: right, type: sonata.block.service.text, settings: { content: "<h2>Welcome to the Sonata Admin</h2> <p>This is a <code>sonata.block.service.text</code> from the Block Bundle, you can create and add new block in these area by configuring the <code>sonata_admin</code> section.</p> <br /> For instance, here a RSS feed parser (<code>sonata.block.service.rss</code>):"} }
            groups:
                sonata_page:
                    items:
                         - vince.cms.admin.article
                default: ~
    services:
       vince.cms.admin.article:
          class: Vince\CmsBundle\Admin\ArticleAdmin
          tags:
            - { name: vince.cms.admin, manager_type: orm, group: sonata_page, label: article }
          arguments: [null, Vince\CmsBundle\Entity\Article, VinceCmsBundle:ArticleAdmin]

    J'ai une entité Article, très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?php
     
    namespace Vince\CmsBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Vince\CmsBundle\Entity\Article
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Vince\CmsBundle\Entity\ArticleRepository")
     */
     
     /**
     * @ORM\Entity
     * @ORM\Table(name="article")
     */
     
    class Article
    {
     
     
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
     
     
        /**
         * @ORM\ManyToOne(targetEntity="User")
         * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
         */
     
        private $user;
     
        /**
         * @var string $name
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        private $name;
     
        /**
         * @var string $content
         *
         * @ORM\Column(name="content", type="text")
         */
        private $content;
     
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set name
         *
         * @param string $name
         * @return Article
         */
        public function setName($name)
        {
            $this->name = $name;
     
            return $this;
        }
     
        /**
         * Get name
         *
         * @return string 
         */
        public function getName()
        {
            return $this->name;
        }
     
        /**
         * Set content
         *
         * @param string $content
         * @return Article
         */
        public function setContent($content)
        {
            $this->content = $content;
     
            return $this;
        }
     
        /**
         * Get content
         *
         * @return string 
         */
        public function getContent()
        {
            return $this->content;
        }
     
        /**
         * Set user
         *
         * @param Vince\CmsBundle\Entity\User $user
         * @return Article
         */
        public function setUser(\Vince\CmsBundle\Entity\User $user = null)
        {
            $this->user = $user;
     
            return $this;
        }
     
        /**
         * Get user
         *
         * @return Vince\CmsBundle\Entity\User 
         */
        public function getUser()
        {
            return $this->user;
        }
    }

    j'ai fait le dossier Admin et ajouté un ArticleAdmin.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    72
    73
    74
    75
    <?php
    namespace Vince\CmsBundle\Admin;
     
    use Sonata\AdminBundle\Admin\Admin;
    use Sonata\AdminBundle\Form\FormMapper;
    use Sonata\AdminBundle\Datagrid\DatagridMapper;
    use Sonata\AdminBundle\Datagrid\ListMapper;
    use Sonata\AdminBundle\Show\ShowMapper;
     
    use Knp\Menu\ItemInterface as MenuItemInterface;
     
    use Vince\CmsBundle\Entity\Article;
     
    class ArticleAdmin extends Admin
    {
        /**
         * @param \Sonata\AdminBundle\Show\ShowMapper $showMapper
         *
         * @return void
         */
        protected function configureShowField(ShowMapper $showMapper)
        {
            $showMapper
                ->add('name')
                ->add('content')
            ;
        }
     
        /**
         * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
         *
         * @return void
         */
        protected function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                ->with('General')
                    ->add('name')
                    ->add('content')
                ->end()
            ;
        }
     
        /**
         * @param \Sonata\AdminBundle\Datagrid\ListMapper $listMapper
         *
         * @return void
         */
        protected function configureListFields(ListMapper $listMapper)
        {
            $listMapper
                ->addIdentifier('name')
                ->add('content')
                ->add('_action', 'actions', array(
                    'actions' => array(
                        'view' => array(),
                        'edit' => array(),
                        'delete' => array(),
                    )
                ))
            ;
        }
     
        /**
         * @param \Sonata\AdminBundle\Datagrid\DatagridMapper $datagridMapper
         *
         * @return void
         */
        protected function configureDatagridFilters(DatagridMapper $datagridMapper)
        {
            $datagridMapper
                ->add('name')
            ;
        }
    }

    Pour le moment, j'ai laissé l'accès a tout le monde, c'est juste pour tester, donc dans mon security.yml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    jms_security_extra:
        secure_all_services: false
        expressions: true
     
    security:
        providers:
            fos_userbundle:
                id: fos_user.user_provider.username
     
        encoders:
            FOS\UserBundle\Model\UserInterface: sha512
     
        firewalls:
            main:
                pattern: ^/
                form_login:
                    provider: fos_userbundle
                    csrf_provider: form.csrf_provider
                logout:       true
                anonymous:    true
     
        access_control:
            - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/admin/, role: IS_AUTHENTICATED_ANONYMOUSLY }
     
        role_hierarchy:
            ROLE_ADMIN:       ROLE_USER
            ROLE_SUPER_ADMIN: ROLE_ADMIN

    quand je vais sur la page
    //app_dev.php/admin/dashboard

    j'ai une erreur .. que je ne comprends vraiment pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function isGranted() on a non-object in /home/******/sites/sf2/html/vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Admin/Admin.php on line 2337



    Franchement, Symfony a une très bonne réputation.. mais quand on tombe la dessus, dur de savoir ou chercher !

    j'ai du oublier quelque chose quelque part.. pourtant pas faute d'avoir lu, relu et re relu les pages de documentation de sonata-project !

    Une idée ??

    Merci d'avance !

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    M'est avis qu'il y a un problème au niveau de la configuration de l'utilisateur (FOSUserBundle ou lien avec Sonata). Maintenant, pour le problème exact, c'est une autre paire de manches .
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Par défaut
    Bon bon.. c'est quand meme une piste. Je vais regarder de ce coté la et refaire la config fos_user, vérifier que je n'ai rien oublié..

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Par défaut
    Bon j'ai vérifié mes configs dans tous les sens.. j'avais quelques soucis en effet.. J'ai passé la journée a refaire et à verifier.. Ca fonctionne mieux, mais c'est pas encore ca !

    Fos_User fonctionne bien (j'ai testé avec les /login /profile.. tout va bien)
    J'ai crée un fos_user et je lui ai donné les ROLE_ADMIN et ROLE_SUPER_ADMIN

    Quand je vais sur /admin/dashboard en tant qu'anonyme, je suis redirigé sur /admin/login, je me loggue avec mon "fos_user" et la.. j'ai le meme message d'erreur encore et encore..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function isGranted() on a non-object in /home/*****/sites/sf2/html/vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Admin/Admin.php on line 2337

    J'ai vérifié mes configs de SonataUserBundle aussi.. Je comprends vraiment pas d'ou ca peut venir.. !

    D'autre part.. Fos_user m'a crée deux tables.. fos_user et fos_user_user.. apparemment un changement de config que j'ai du faire quelque part, mais je vois pas trop ou..

    J'en ai deja fait pas mal des sites php objet, MVC et tout.. mais symfony ca calme..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Security
    Username 	vince
    Authenticated? 	yes
    Roles 	[ROLE_SUPER_ADMIN, ROLE_ADMIN, ROLE_USER]


    Hmmm.. je dois avoir un souci de config quelque part..
    Ma classe User contient un profile_id, lien vers la table profile.. qui n'est pas présente dans la table fos_user_user.. D'ailleurs je ne vois vraiment pas d'ou elle sort, celle la.. j'ai vérifié ma classe User

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    <?php
    // src/Acme/UserBundle/Entity/User.php
     
    namespace Vince\CmsBundle\Entity;
     
    use FOS\UserBundle\Entity\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="fos_user")
     */
    class User extends BaseUser
    {
        /**
         * @ORM\OneToOne(targetEntity="Profile")
         * @ORM\JoinColumn(name="profile_id", referencedColumnName="id")
         */
     
        private $profile;
     
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
     
        /**
         * @ORM\Column(name="gender", type="boolean")
         */
        private $gender;
     
        /**
         * @ORM\Column(name="first_name", type="string", length=255)
         */
        private $first_name;
     
        /**
         * @ORM\Column(name="last_name", type="string", length=255)
         */
        private $last_name;
     
        /**
         * @ORM\Column(name="date_of_birth", type="date")
         */
        private $date_of_birth;
     
        /**
         * @ORM\Column(name="website", type="string", length=255)
         */
        private $website;
     
        /**
         *
         * @ORM\Column(name="biography", type="text")
         */
        private $biography;
     
        /**
         * @ORM\Column(name="locale", type="string", length=10)
         */
        private $locale;
     
        /**
         * @ORM\Column(name="timezone", type="string", length=255)
         */
        private $timezone;
     
        /**
         * @ORM\Column(name="phone", type="string", length=255)
         */
        private $phone;
     
     
        public function __construct()
        {
            parent::__construct();
            // your own logic
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set profile
         *
         * @param Vince\CmsBundle\Entity\Profile $profile
         * @return User
         */
        public function setProfile(\Vince\CmsBundle\Entity\Profile $profile = null)
        {
            $this->profile = $profile;
     
            return $this;
        }
     
        /**
         * Get profile
         *
         * @return Vince\CmsBundle\Entity\Profile 
         */
        public function getProfile()
        {
            return $this->profile;
        }
     
     
     
        /**
         * Set gender
         *
         * @param boolean $gender
         * @return User
         */
        public function setGender($gender)
        {
            $this->gender = $gender;
     
            return $this;
        }
     
        /**
         * Set first_name
         *
         * @param string $firstName
         * @return User
         */
        public function setFirstName($firstName)
        {
            $this->first_name = $firstName;
     
            return $this;
        }
     
        /**
         * Get first_name
         *
         * @return string 
         */
        public function getFirstName()
        {
            return $this->first_name;
        }
     
        /**
         * Set last_name
         *
         * @param string $lastName
         * @return User
         */
        public function setLastName($lastName)
        {
            $this->last_name = $lastName;
     
            return $this;
        }
     
        /**
         * Get last_name
         *
         * @return string 
         */
        public function getLastName()
        {
            return $this->last_name;
        }
     
        /**
         * Get gender
         *
         * @return boolean 
         */
        public function getGender()
        {
            return $this->gender;
        }
     
        /**
         * Set date_of_birth
         *
         * @param \DateTime $dateOfBirth
         * @return User
         */
        public function setDateOfBirth($dateOfBirth)
        {
            $this->date_of_birth = $dateOfBirth;
     
            return $this;
        }
     
        /**
         * Get date_of_birth
         *
         * @return \DateTime 
         */
        public function getDateOfBirth()
        {
            return $this->date_of_birth;
        }
     
        /**
         * Set website
         *
         * @param string $website
         * @return User
         */
        public function setWebsite($website)
        {
            $this->website = $website;
     
            return $this;
        }
     
        /**
         * Get website
         *
         * @return string 
         */
        public function getWebsite()
        {
            return $this->website;
        }
     
        /**
         * Set biography
         *
         * @param string $biography
         * @return User
         */
        public function setBiography($biography)
        {
            $this->biography = $biography;
     
            return $this;
        }
     
        /**
         * Get biography
         *
         * @return string 
         */
        public function getBiography()
        {
            return $this->biography;
        }
     
        /**
         * Set locale
         *
         * @param string $locale
         * @return User
         */
        public function setLocale($locale)
        {
            $this->locale = $locale;
     
            return $this;
        }
     
        /**
         * Get locale
         *
         * @return string 
         */
        public function getLocale()
        {
            return $this->locale;
        }
     
        /**
         * Set timezone
         *
         * @param string $timezone
         * @return User
         */
        public function setTimezone($timezone)
        {
            $this->timezone = $timezone;
     
            return $this;
        }
     
        /**
         * Get timezone
         *
         * @return string 
         */
        public function getTimezone()
        {
            return $this->timezone;
        }
     
        /**
         * Set phone
         *
         * @param string $phone
         * @return User
         */
        public function setPhone($phone)
        {
            $this->phone = $phone;
     
            return $this;
        }
     
        /**
         * Get phone
         *
         * @return string 
         */
        public function getPhone()
        {
            return $this->phone;
        }
    }
    et les entités semblent correctes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    php app/console doctrine:mapping:info
    Found 9 mapped entities:
    [OK]   Vince\CmsBundle\Entity\User
    [OK]   Vince\CmsBundle\Entity\Profile
    [OK]   Vince\CmsBundle\Entity\Article
    [OK]   FOS\UserBundle\Entity\Group
    [OK]   FOS\UserBundle\Entity\User
    [OK]   Sonata\UserBundle\Entity\BaseUser
    [OK]   Sonata\UserBundle\Entity\BaseGroup
    [OK]   Application\Sonata\UserBundle\Entity\Group
    [OK]   Application\Sonata\UserBundle\Entity\User
    argh !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Par défaut
    Bon.. je sais pas ce que j'avais fait de faux .. En tout cas, j'ai tout viré et tout recommencé (ca va très vite, quand on l'a déjà fait une fois).. et cette fois, tout fonctionne parfaitement.

    Je continue dans ma découverte Symfony 2.1, donc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/02/2014, 23h49
  2. [PDO] Call to a member function setFetchMode() on a non-object
    Par magmus dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/11/2008, 22h05
  3. Réponses: 15
    Dernier message: 20/12/2007, 00h30
  4. Réponses: 2
    Dernier message: 17/11/2007, 16h23
  5. Réponses: 9
    Dernier message: 05/07/2007, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo