Bonjour,

Voila, j'ai plusieurs entityManager définies comme suit :

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
doctrine:
    dbal:
        default_connection:   default
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
            forum:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "web_forum"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
            boutique:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "web_boutique"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: "%kernel.root_dir%/data/data.db3"
        # path:     "%database_path%"
 
    orm:
        default_entity_manager:   default
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
                connection:       default
                mappings:
                    ArticleBundle: ~
                    CandidatureBundle: ~
                    ImageBundle: ~
                    UserBundle: ~
            boutique:
                connection:       boutique
                mappings:
                    BoutiqueBundle: ~
                    ImageBundle: ~
            forum:
                connection:       forum
Comme vous le voyez, la classe ImageBundle sert dans plusieurs base de données (boutique et site)

Avec SonataAdminBundle, j'ai voulu configuré la gestion de l'entité "Catégorie" de mon bundle BoutiqueBundle :

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
<?php
namespace MinecraftProject\BoutiqueBundle\Admin;
 
// ......
 
    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('nom', 'text')
            ->add('description', 'textarea')
            ->add('image', new ImageType(), array('label' => "URL de l'image", 'required' => false))
            ->add('isVisible', null, array('label' => 'Visibilité sur la boutique', 'required' => false))
        ;
    }
Le problème, c'est qu'a l'enregistrement, il me sort une erreur :

Failed to create object: MinecraftProject\BoutiqueBundle\Entity\Categorie

Je me suis renseigné, et d'après ce que j'ai pu lire a divers endroits, cela viendrais du fait que ImageBundle se trouve sur plusieurs EntityManager, donc ça ferait bugué l'insertion.

Pour y remédié, j'ai voulu ficé l'entityManager dans mon service sonata en suivant les indications ici : https://github.com/sonata-project/So...ndle/issues/12

Mon service.yml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
services:
    sonata.admin.boutique.categorie:
            class: MinecraftProject\BoutiqueBundle\Admin\CategorieAdmin
            tags:
                - { name: sonata.admin, manager_type: orm, group: "Boutique", label: "Categories" }
            arguments:
                - ~
                - MinecraftProject\BoutiqueBundle\Entity\Categorie
                - ~
                - '@service_container'
            calls:
                - [ setTranslationDomain, [BoutiqueBundle]]
                - [ setModelManager, [@sonata.admin.boutique.entity_manager]]
Mais le probleme, c'est que dans Doctrine_ORM.xml, je ne voit pas ou changer le nom de l'entity manager afin de mettre celui de la boutique :
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
 
<?xml version="1.0" encoding="UTF-8" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <services>
        <service id="sonata.admin.boutique.entity_manager" factory-service="doctrine" factory-method="getEntityManager" class="Doctrine\ORM\EntityManager" public="false">
            <argument>%sonata_doctrine_orm_admin.entity_manager%</argument>
        </service>
 
        <service id="sonata.admin.manager.orm" class="Sonata\DoctrineORMAdminBundle\Model\ModelManager">
            <argument type="service" id="doctrine" />
        </service>
 
        <!-- FormBuilder -->
        <service id="sonata.admin.builder.orm_form" class="Sonata\DoctrineORMAdminBundle\Builder\FormContractor">
            <argument type="service" id="form.factory" />
        </service>
 
        <!-- ListBuilder -->
        <service id="sonata.admin.builder.orm_list" class="Sonata\DoctrineORMAdminBundle\Builder\ListBuilder" >
            <argument type="service" id="sonata.admin.guesser.orm_list_chain" />
            <argument />
        </service>
 
        <service id="sonata.admin.guesser.orm_list" class="Sonata\DoctrineORMAdminBundle\Guesser\TypeGuesser">
            <tag name="sonata.admin.guesser.orm_list" />
        </service>
 
        <service id="sonata.admin.guesser.orm_list_chain" class="Sonata\AdminBundle\Guesser\TypeGuesserChain">
            <argument />
        </service>
 
        <!-- ShowBuilder  -->
        <service id="sonata.admin.builder.orm_show" class="Sonata\DoctrineORMAdminBundle\Builder\ShowBuilder" >
            <argument type="service" id="sonata.admin.guesser.orm_show_chain" />
            <argument />
        </service>
 
        <service id="sonata.admin.guesser.orm_show" class="Sonata\DoctrineORMAdminBundle\Guesser\TypeGuesser">
            <tag name="sonata.admin.guesser.orm_show" />
        </service>
 
        <service id="sonata.admin.guesser.orm_show_chain" class="Sonata\AdminBundle\Guesser\TypeGuesserChain">
            <argument />
        </service>
 
        <!-- DatagridBuilder guesser -->
        <service id="sonata.admin.builder.orm_datagrid" class="Sonata\DoctrineORMAdminBundle\Builder\DatagridBuilder">
            <argument type="service" id="form.factory" />
            <argument type="service" id="sonata.admin.builder.filter.factory" />
            <argument type="service" id="sonata.admin.guesser.orm_datagrid_chain" />
            <argument>%form.type_extension.csrf.enabled%</argument>
        </service>
 
        <service id="sonata.admin.guesser.orm_datagrid" class="Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser">
            <tag name="sonata.admin.guesser.orm_datagrid" />
        </service>
 
        <service id="sonata.admin.guesser.orm_datagrid_chain" class="Sonata\AdminBundle\Guesser\TypeGuesserChain">
            <argument />
        </service>
    </services>
</container>
Une ou plusieurs idées, conseil pour me faire avancé ?

Merci d'avance