php - 形式上的一对一关联?

标签 php symfony symfony-forms one-to-one

在symfony 2.0中,如何在表单中使用一对一关联创建下拉列表?你们能举个好例子吗?

最佳答案

我会尽量按照我理解的方式回答你的问题。假设我有一个绑定(bind)到单个 University 对象的 Faculty 对象。因此,在用于创建或编辑教师的表单中,我显示了数据库中所有大学的组合框,用户从中选择一个。有一种特殊的 Symfony 字段类型可以做到这一点:实体类型。下面是我在用于创建教师表单的 FacultyType 对象中使用的 buildForm 方法的代码:

// Application\AcmeBundle\Form\Type\FacultyType
public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('name');
    $builder->add('university', 'entity', array(
        // The class of the entity used as a combo box item
        'class' => 'AcmeBundle:University',

        // The property of the entity displaying the entity as text
        'property' => 'name',

        // The query builder used to populate the combo box, accepts
        // a QueryBuilder object or a \Closure like below 
        'query_builder' => function(EntityRepository $repository) {
            // This will return a query builder selecting all universities
            return $repository->createQueryBuilder('u');
        }
    ));
}

注意:实体字段类型还有其他属性可以设置,我请你看这个page了解更多信息。

呈现后,这将显示一个组合框,其中包含我在数据库中设置的所有大学。当用户保存表单时,选择的大学将通过 setter 分配给绑定(bind)到表单的教师对象。您可能会呈现一个下拉列表而不是组合框。如果您需要选择多个实体,字段类型实体的 'multiple' 选项可能会有用。

也就是说,我展示的示例不是一对一关系,而是 Faculty 对象的多对一关系和 的一对多关系>大学对象。一对一关系更像是一种关系,其中 University 具有唯一的 Address。在这种情况下,组合框不会有用,因为大学只能有一个地址,因此子表单会更合适。如果它有很多地址,那么它就变成一对多的关系,就像大学和它的院系之间的关系。

不确定这是否能正确回答您的问题,但我希望它能引导您找到最终解决方案。

问候, 马特

关于php - 形式上的一对一关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5965490/

相关文章:

php - 在 PHP 中将用户 ID 转换为名称(单独的表)

javascript - 有没有办法在循环中对我的 javascript 函数进行编号?

php - 使用 EventSubscriber 向 Symfony2 表单动态添加选择

php - Symfony2 和 Selectize.js : Clearest way to persist new items in entity field type?

html - "NotBlank"约束上的验证组使字段在未使用时具有 "required"属性

php - 如何使用 PHP 获取请求来源?

javascript - PHP 和 AngularJS 的两种方式绑定(bind)

Symfony:如何从第三方包加载工作流配置

forms - 实体形式问题与 Symfony2 关系多对多

php - Symfony 3 文件上传