我想用这样的合成模式创建表单: https://symfony.com/doc/current/form/inherit_data_option.html
我使用Symfony 3.
它正在工作。我有像单个对象的每个元素并添加它。
但最后我的表单元素名称的名称类似于
form[subform][element]
如何在名称属性中制作没有子表单的扁平结构?
use AppBundle\Base\Form\NickType;
use AppBundle\Base\Form\MailType;
use AppBundle\Base\Form\PassType;
use AppBundle\Base\Form\UserType;
class RegisterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nick', NickType::class)
->add('mail', MailType::class)
->add('password', PassType::class)
->add('repeat_password', PassType::class)
(etc...)
和单一元素
class NickType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nick', TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'inherit_data' => true
));
}
}
答案 0 :(得分:0)
如果只继承TextType,则无需定义->andFilterWhere(['between', 'DATE_FORMAT(CREATED_DATE, "%Y-%m-%d")', $this->date_from, $this->date_to]
。您可以删除NickType
,NickType
等
你可以这样做:
MailType
如果您想重复使用表单字段,则必须创建Custom Form Field Type:
class RegisterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nick', TextType::class)
;
(etc...)
您可以从元素名称中删除class NickType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
//...
));
}
public function getParent()
{
return TextType::class;
}
}
,但不建议删除它,因为当您阅读填充表单数据的请求时,您可以通过其表单名称来标识表单。 (via)
您可以将根表单的名称设置为空,然后将字段名称设置为空 将只是形式。通过
这样做
form[]
(via)