【问题标题】:Symfony2 Form Embed deep relationship in FormSymfony2 Form 在 Form 中嵌入深层关系
【发布时间】:2013-06-20 12:00:52
【问题描述】:

在我的实体模型中,我有一个User,它通过Enrollment 连接到Organization

UserEnrollment 具有一对一关系EnrollmentOrganization 具有多对一关系

Enrollment 有一个属性已批准

当用户注册时,我希望在下拉选择列表中有一个组织名称列表。 如果User 注册了一个Enrollment 对象,则会创建一个将UserOrganization 连接起来的对象。

由于UserOrganization 之间没有直接链接,因此似乎不可能在 Symfony2 表单中获得它。

关于如何在表单中嵌入深层关系的任何想法?如果有直接链接,我通常只使用表单构建器并添加一个实体,但现在没有直接链接。

【问题讨论】:

    标签: php forms symfony entity-relationship symfony-forms


    【解决方案1】:

    如果您可以确定,用户每次注册都可以这样做:

    $builder->add('organizations', 'entity', array('property_path' => 'enrollment.organizations', ));
    

    如果您定义了查询构建器,则可能是其他解决方案

    $builder->add('organisations', 'entity', array(
                'class' => '%ENTITY_NAME%',
                'query_builder' => function (%REPOSITORY_NAME% $repository) {
                    return %QUERY%;
                }
            ));
    

    或使用事件监听器

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) use ($factory) {
        $data = $event->getData();                     
        if ($data->getEnrollment()) {
            $organisations = $data->getEnrollment()->getOrganisations();
        } else {
            $organisations = ...
        }
        $form = $event->getForm();
        $form->add($factory->createNamed('organizations', 'entity', $organisations, array('required' => false)));
    });
    

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多