2014-09-24 2 views
4

Я использую FOSUserBundle 1.3 и SonataUserBundle, который расширяет его. У меня есть свой собственный комплект, который проходит SonataUserBundle и внутри него я держу класс пользователя администратора и пользователя & пользователем группы объект (наряду с соответствующими .orm.xml отображений)Пользовательские и пользовательские группы с SonataAdminBundle

Мой config.yml:

parameters: 
    sonata.user.admin.user.entity: Acme\Bundle\UserBundle\Entity\User 
    sonata.user.admin.group.entity: Acme\Bundle\UserBundle\Entity\Group 
    sonata.user.admin.user.class: Acme\Bundle\UserBundle\Admin\UserAdmin 

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class:  Acme\Bundle\UserBundle\Entity\User 
    group: 
     group_class: Acme\Bundle\UserBundle\Entity\Group 
     group_manager: sonata.user.orm.group_manager 
    service: 
     user_manager: sonata.user.orm.user_manager 

Оба класса сущности в основном просто расширяют пользовательский и групповой класс Sonata. Мой класс user-admin расширяет сонату \ UserBundle \ Admin \ Entity \ UserAdmin.

Проблемы в том, что в моем/администраторе, когда я список пользователей, я получаю ошибку:

Notice: Undefined index: groups in /vagrant/vendor/sonata-project/doctrine-orm-admin-bundle/Guesser/FilterTypeGuesser.php line 64

ответ

0

У меня такая же проблема ... Я думаю, что конфигуратор пользователя сонаты не регистрирует отображение доктрины ... https://github.com/sonata-project/SonataUserBundle/blob/master/DependencyInjection/SonataUserExtension.php#L249

Как обходного я добавил многие ко многим отношению к моей настраиваемого объекта пользователя

namespace Acme\Bundle\UserBundle\Entity 

class User 
{ 

    ... 

    /**             
    * @ORM\ManyToMany(targetEntity="Group")    
    * @ORM\JoinTable(name="fos_user_user_group")  
    */             
    protected $groups;         
} 
+0

Это прекрасно работает временно, однако должно быть лучше исправить это. Песочница отлично работает. –

+0

Правильное решение - добавить SonataEasyExtendsBundle в AppKernel ... Я думаю, что решение @Mait лучше. – SilvioQ

+0

Спасибо, он решил проблему. –

4

редактировать: Как сказал @Hemang, мой первый ответ был не очень явным. Поэтому я исправил его

Чтобы получить правильное сопоставление для вашего пользовательского объекта, вы должны включить SonataEasyExtendsBundle.

Чтобы сделать это, Жюст редактировать AppKernel.php и добавьте строку

new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle() 

в функции registerBundles.

Вот рабочий AppKernel.php Exemple:

<?php 

use Symfony\Component\HttpKernel\Kernel; 
use Symfony\Component\Config\Loader\LoaderInterface; 

class AppKernel extends Kernel 
{ 

    public function registerBundles() 
    { 
    $bundles = array(
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
     new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 

     new Knp\Bundle\MenuBundle\KnpMenuBundle(), 
     new Ivory\CKEditorBundle\IvoryCKEditorBundle(), 
     new FOS\UserBundle\FOSUserBundle(), 
     new Sonata\CoreBundle\SonataCoreBundle(), 
     new Sonata\BlockBundle\SonataBlockBundle(), 
     new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(), 
     new Sonata\AdminBundle\SonataAdminBundle(), 
     new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'), 
     new Application\Sonata\UserBundle\ApplicationSonataUserBundle(), 
     new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(), 
    ); 

    if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
    } 

    public function registerContainerConfiguration(LoaderInterface $loader) 
    { 
    $loader->load(__DIR__ . '/config/config_' . $this->getEnvironment() . '.yml'); 
    } 

} 
Смежные вопросы