SonataAdmin类中的Doctrine访问

时间:2016-11-12 11:03:58

标签: symfony sonata-admin

我与额外的字段有多对多关联。在本教程之后,我解决了一个新实体和两个一对多的关系:http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html

会议---> MeetingContacts< --- Contact

当我创建一个新会议时,我需要选择所有要协助的人,所以我有一个包含所有联系人的复选框列表。 这在索纳塔完美无缺。

这是我的会议configureFormFields类:

 ->with('Contacts', array('class' => 'col-md-6'))
            ->add('contacts' , 'entity' , array(
                      'class'    => 'AppBundle:Contact' ,
                      'expanded' => true ,
                      'multiple' => true , ))
        ->end();

我的问题是我想在联系实体的两个属性的创建操作中过滤此列表复选框。

我在论坛中创建的解决方案是将数组传递给视图,其中包含每个值的联系人,然后使用javascript显示或隐藏复选框。

->with('Contacts', array('class' => 'col-md-6'))
            ->add('contacts' , 'entity' , array(
                      'class'    => 'AppBundle:Contact' ,
                      'expanded' => true ,
                      'multiple' => true , ), 

                       array('myArray' => myArray)))
          ->end();

现在问题是我无法访问Contact Repository以在Admin Class中创建此数组。

我尝试没有成功:

$em = $this->getConfigurationPool()->getContainer()->get('Doctrine')->getManager()

并在服务中添加原则(No Entity Manager in Custom Class and ContextErrorException

sonata.admin.contact:
    class: AppBundle\Admin\ContactAdmin
    tags:
        - { name: sonata.admin, manager_type: orm, group: "Content", label: "Contacts" }
    arguments:
        - ~
        - AppBundle\Entity\Contact
        - ~
        - @doctrine.orm.default_entity_manager

    calls:
        - [ setTranslationDomain, [AppBundle]]

但是当我添加第四个参数时,我会遇到错误的yml格式的异常。

如何在Admin类中访问doctrine EM,或者如何将这些额外数据传递给admin创建表单?

感谢。

1 个答案:

答案 0 :(得分:2)

我找到了解决方案:

class MeetingAdmin extends AbstractAdmin
{
    public $arrProfiles;

    protected function configureFormFields(FormMapper $formMapper)
    {

         $this->arrProfiles = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager()->getRepository('AppBundle:Contact')->findProfile();

 ...

然后在模板中我可以访问数组:

{{admin.arrProfiles}}