#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, но все еще не мог найти решение. Мои вопросы:
- Какое событие было бы правильным для использования? Я хочу, чтобы он обновил поле выбора столбца, как только будет изменено поле выбора таблицы. Я не хочу ждать, пока форма будет отправлена пользователем. https://symfony.com/doc/4.4/form/dynamic_form_modification.html#form-events-submitted-data
Основываясь на моих скудных знаниях, я бы предпочел использовать событие post_submit, но здесь я могу ошибаться. Это событие также, похоже, по какой-то причине не срабатывает :/
- Как я могу динамически изменять параметры поля столбца с помощью такого события? В примере symfony использовался ajax, будет ли это правильным способом?
Может быть, кто-нибудь сможет мне здесь помочь. Был бы очень признателен. Я прочитал много вопросов по stackoverflow, касающихся этой проблемы, но пока не смог заставить ее работать.
Спасибо!