我有一个 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)
;
}
}
我尝试阅读有关 symfony 表单事件的文档,但仍然找不到解决方案。 我的问题:
根据我目前所知的一点点,我倾向于使用 post_submit 事件,但我在这里可能是错的。由于某种原因,此事件似乎也没有触发:/
也许有人可以帮助我。将不胜感激。 我读了很多关于这个问题的 stackoverflow 问题,但还无法让它工作。
谢谢!