gpt4 book ai didi

forms - 如何在另一个选择框上使用相关的选择框?

转载 作者:行者123 更新时间:2023-12-03 11:28:44 24 4
gpt4 key购买 nike

如何在 Symfony 中使用相关的选择框?

假设我有一个包含公司的选择列表,另一个包含所选公司的员工。我如何在 Symfony 中定义它们?
我已经创建了所有与 Javascript 相关的代码,但是当提交我的表单并在某些字段上出现错误时,所有“子”选择字段都被重置为 null。

有任何想法吗?
谢谢,

编辑:由于这个问题似乎被误解了,我将添加一些精确度:

描述 :

  • 我有一个实体公司,其中包含使用 @OneToMany 关系的员工列表。
  • 当我在选择/下拉列表中选择一家公司时,包含员工的第二个下拉列表通过 jQuery 更新。 该部分已完成,完美运行
  • 提交表单时没有错误,实体表单解决方案工作正常。
  • 提交包含错误的表单时,第二个下拉列表包含 全部 可能的值。它们不会在选定的公司中过滤。

  • 尝试过的解决方案:
  • 我的第一个想法是使用 表单实体类型,认为组件可以以某种方式绑定(bind)在另一个字段上。 IE。根据所选公司的值(value)更新员工名单。

  • 不工作,没有办法做到这一点。即使是非开箱即用的解决方案......
  • 然后我想到了手动传递 选择的公司为参数到第二个下拉列表的查询生成器。

  • 但是在创建表单时,值是空的。这些值仅在 上设置绑定(bind)请求 .
  • 考虑使用选择类型。通过 Javascript 将所有过滤器功能委托(delegate)给 UI。这意味着当页面加载时,会出现一个空列表,并由基于所选公司的 Javascript 填充。

  • 这确实有效,但我认为除了真正 之外没有别的词。真是丑陋的编程这里。

    PS:

    问题已在此处、Symfony2 邮件列表、Twitter 和官方 Symfony 2 论坛上提出。当然,在发布我的问题之前,我已经多次搜索了其中的每一个。

    最佳答案

    关于你已经尝试过的,我认为你应该重试你的第一个/第二个想法:

    My first idea was to use the form entity type, thinking the component could be binded somehow on another field. ie. update list of employees based on the value of the selected company.



    您可以使用 entity 填充员工选择框。类型。
    您所要做的就是定义好的选项:

    class FooType extends AbstractType
    {
    public function buildForm(FormBuilder $builder, array $options)
    {
    $builder
    ->add('employee', 'entity', array(
    'class' => 'Entity\Employee',
    'query_builder' => function ($repository) use($options) {
    return $repository
    ->createQueryBuilder('e')
    ->where('e.company = :company')
    ->setParameter('company', $options['companyId'])
    ;
    },
    ))
    ;
    }

    public function getDefaultOptions(array $options)
    {
    return array('data_class' => 'Entity\Foo', 'companyId' => null);
    }
    }

    Then I thought about manually passing the selected company as parameter to the query builder of the second dropdown list.



    此处的示例根据 companyId 表单的选项过滤员工列表。
    您可以通过直接过滤表单数据中存在的公司来修改此行为。

    public function buildForm(FormBuilder $builder, array $options)
    {
    $companyId = $builder->getData()->getCompanyId();
    $builder
    ->add('employee', 'entity', array(
    'class' => 'Entity\Employee',
    'query_builder' => function ($repository) use ($companyId) {
    return $repository
    ->createQueryBuilder('e')
    ->where('e.company = :company')
    ->setParameter('company', $companyId)
    ;
    },
    ))
    ;
    }

    您仍然需要执行 getEmployee()setEmployee() Entity\Foo 中的方法类(class)。

    But when the form is created, the values are empty. The values are only set on bindRequest.



    否。值是在您使用表单工厂(第三个参数)创建表单时设置的,
    或当您调用 $form->setData($foo); 时.当您 bind 时,数据被修改表单的新输入。

    这种方法可能存在问题:绑定(bind)到表单的员工 ID 可能在表单选择列表中不可用,因为您更改了公司(因此也更改了员工)。

    关于forms - 如何在另一个选择框上使用相关的选择框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052916/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com