[Symfony 2] Changer entityManager de SonataAdmin
Bonjour,
Voila, j'ai plusieurs entityManager définies comme suit :
Code:
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:
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:
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:
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