我正在嘗試創建一個帶有預定義/靜態行的 CollectionType 表單(不是帶有 JS 的動態表單)。
這就是我想要的:
$formBuilder = $this->createFormBuilder()->add('titles', CollectionType::class, [
'entry_type' => TextType::class,
'data' => ['en' => '', 'de' => ''],
]);
但這不起作用(它導致表單中根本沒有行):
$formBuilder = $this->createFormBuilder()->add('titles', CollectionType::class, [
'entry_type' => TextType::class,
]);
$formBuilder->get('titles')->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$data = ['en' => '', 'de' => ''];
$event->setData($data);
});
最后,我正在尋找一個像這樣的簡單形式:
<form name="form" method="post">
<div id="form">
<div><label>Titles</label>
<div id="form_titles">
<div><label for="form_titles_en">En</label>
<input type="text" id="form_titles_en" name="form[titles][en]">
</div>
<div><label for="form_titles_de">De</label>
<input type="text" id="form_titles_de" name="form[titles][de]">
</div>
</div>
</div>
</form>
由于各種原因,我需要第二種方法。有沒有人有辦法解決嗎?
僅供參考:我當前的平臺是 Symfony 5.4 和 Php 8.1,但我希望這個解決方案能夠與 Php7.4 和 Symfony 6 一起使用
uj5u.com熱心網友回復:
感謝@Bossman 給我指導。這就是我解決問題的方法。
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use App\LocaleProvider;
class TranslationCollectionType extends AbstractType
{
private LocaleProvider $localeProvider;
public function __construct(LocaleProvider $localeProvider)
{
$this->localeProvider = $localeProvider;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($this->localeProvider->getSupportedLocaleNames() as $name => $value) {
$builder->add($value, TextType::class, [
'label' => $name,
]);
}
}
}
然后添加到表單中:
$builder->add('Titles', TranslationCollectionType::class);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479590.html
下一篇:表單重定向以確認
