Symfony Форма Событие — Изменение параметров поля выбора на основе другого поля выбора

#php #forms #symfony #events #addeventlistener

Вопрос:

У меня есть форма symfony с таблицами базы данных в поле выбора. Второе поле-это поле выбора, в котором должны отображаться столбцы в предыдущем выбранном поле таблицы базы данных.

Я заставил его работать без использования форм symfony, используя разметку формы с простым javascript. Теперь я хочу добиться того же с формами 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)
        ;
    }
}
 

Внешний интерфейс:
Внешний интерфейс

Я попытался прочитать документы, касающиеся событий формы symfony, но все еще не мог найти решение. Мои вопросы:

  1. Какое событие было бы правильным для использования? Я хочу, чтобы он обновил поле выбора столбца, как только будет изменено поле выбора таблицы. Я не хочу ждать, пока форма будет отправлена пользователем. https://symfony.com/doc/4.4/form/dynamic_form_modification.html#form-events-submitted-data

Основываясь на моих скудных знаниях, я бы предпочел использовать событие post_submit, но здесь я могу ошибаться. Это событие также, похоже, по какой-то причине не срабатывает :/

  1. Как я могу динамически изменять параметры поля столбца с помощью такого события? В примере symfony использовался ajax, будет ли это правильным способом?

Может быть, кто-нибудь сможет мне здесь помочь. Был бы очень признателен. Я прочитал много вопросов по stackoverflow, касающихся этой проблемы, но пока не смог заставить ее работать.

Спасибо!