Symfony 表单事件 - 根据其他选择字段更改选择字段选项

问题描述 投票:0回答:1

我有一个 symfony 表单,在选择字段中包含数据库表。 第二个字段是一个选择字段,应显示先前选择的数据库表字段中的列。

我通过使用带有纯 JavaScript 的表单标记,在不使用 symfony 表单的情况下让它工作。 现在我想用 symfony 形式实现相同的目标,但无法让它工作。

到目前为止我的代码:

class SearchReplaceType extends AbstractType
{
    private $_tableColumns = [];

    public function __construct(TwigEnvironment $twig, Connection $connection)
    {
        $this->twig = $twig;
        $this->connection = $connection;
    }

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $schemaManager = $this->connection->getSchemaManager();
        $tables = $schemaManager->listTables();
        $tableNames = [];

        foreach($tables as $table) {
            $tableNames[$table->getName()] = $table->getName();
            foreach($table->getColumns() as $column) {
                $this->_tableColumns[$table->getName()][] = $column->getName();
            }
        }
        
        $builder
            ->add('table', ChoiceType::class, [
                'placeholder' => 'Test',
                'choices' => $tableNames
            ])
            ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
                // check which value/option is selected in table choice field
                // display the columns in the selected table as choices
            })
            ->add('column', ChoiceType::class, [
                'placeholder' => 'Please select a column',
                'choices' => [] // callback function to get the columns
            ])
            ->add('search', TextType::class)
            ->add('replace', TextType::class)
            ->add('submit', SubmitType::class)
        ;
    }
}

前端: Frontend

我尝试阅读有关 symfony 表单事件的文档,但仍然找不到解决方案。 我的问题:

  1. 哪个是正确使用的事件?我希望它在表选择字段更改后立即更新列选择字段。我不想等到用户提交表单。 https://symfony.com/doc/4.4/form/dynamic_form_modification.html#form-events-subscribed-data

根据我目前所知的一点点,我倾向于使用 post_submit 事件,但我在这里可能是错的。由于某种原因,此事件似乎也没有触发:/

  1. 如何通过此类事件动态更改列字段的选项?在 symfony 示例中使用了 ajax,这是正确的方法吗?

也许有人可以帮助我。将不胜感激。 我读了很多关于这个问题的 stackoverflow 问题,但还无法让它工作。

谢谢!

php forms symfony events addeventlistener
1个回答
0
投票

Symfony 6.4

在这里查看这个答案,它回答了完全相同的问题:

https://stackoverflow.com/a/78845393/1959405

© www.soinside.com 2019 - 2024. All rights reserved.