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 !