访问嵌入式表单数据 symfony
Access embedded form data symfony
我正在使用 symfony 中的嵌入式表单,但无法从嵌入式表单中获取数据。
这是我的专利表格
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use AppBundle\Form\SubscriberAddressType;
class SubscriberDetailsType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('firstname', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'First Name',
'class' => 'form-control'
]])
->add('lastname', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => array(
'placeholder' => 'Last Name',
'class' => 'form-control'
)])
->add('emailaddress', EmailType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'Email Address',
'pattern' => '.{2,}',//minlength
'class' => 'form-control'
]])
->add('subscriberaddress', CollectionType::class, ['entry_type' => SubscriberAddressType::class])
->add('submit', SubmitType::class, [
'label' => 'Sign Up',
'attr' => [
'class' => 'smoothScroll btn btn-danger sb-button'
]
])
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\SubscriberDetails']);
}
/**
* @return string
*/
public function getName() {
return 'subscriberdetails';
}
}
这是我的 child 表格
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class SubscriberAddressType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('address1', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'Address 1',
'class' => 'form-control'
]])
->add('city', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => array(
'placeholder' => 'City',
'class' => 'form-control'
)])
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\SubscriberAddress']);
}
/**
* @return string
*/
public function getName() {
return 'subscriber';
}
}
这就是我在我的 Twig 模板中调用嵌入表单的方式
<div class="form-group ">
{% for field in form.subscriberaddress %}
{{ form_label(field.city) }}
{{ form_widget(field.city) }}
{% endfor %}
</div>
当我尝试使用下面的表单获取数据时:
$firstname = $form['firstname'] ->getData();
$lastname =$form['lastname'] ->getData();
$email = $form['emailaddress'] ->getData();
$address = $form['subscriber address']['address1'] ->getData();
$city =$form['subscriber address']['city'] ->getData();
它在前 3 行以上工作正常,但是当它到达 $address = $form['subscriber address']['address1'] ->getData(); 时with 是一个嵌入式字段,symfony 会报错 child element does not exist.
我已经尝试浏览官方 symfony 食谱以及这些帖子
Post1, Post2 但其中 none 似乎回答了我的问题,即:我如何从表单中的嵌入字段中获取数据?
您的嵌入表单实际上嵌入在 collection 中(不确定这是否是您的意图)因此您需要将其视为 collection/array
如果collection是错误的
您可能想将其更改为
->add('subscriberaddress', SubscriberAddressType::class)
然后 $form->getData() 将起作用。
或者,您可以致电 $form->get('subscriberaddress')->getData()
如果你真的想要collection
如果您确实想将其用作 CollectionType
以保留 SubscriberAddressType
的多个副本,则通过
访问数据
foreach ($form->get('subscriberaddress') as $subForm) {
$subData[] = $subForm->getData();
}
同时考虑将名称 subscriberaddress
更改为 subscriberAddresses
以表明它是 collection
我正在使用 symfony 中的嵌入式表单,但无法从嵌入式表单中获取数据。
这是我的专利表格
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use AppBundle\Form\SubscriberAddressType;
class SubscriberDetailsType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('firstname', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'First Name',
'class' => 'form-control'
]])
->add('lastname', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => array(
'placeholder' => 'Last Name',
'class' => 'form-control'
)])
->add('emailaddress', EmailType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'Email Address',
'pattern' => '.{2,}',//minlength
'class' => 'form-control'
]])
->add('subscriberaddress', CollectionType::class, ['entry_type' => SubscriberAddressType::class])
->add('submit', SubmitType::class, [
'label' => 'Sign Up',
'attr' => [
'class' => 'smoothScroll btn btn-danger sb-button'
]
])
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\SubscriberDetails']);
}
/**
* @return string
*/
public function getName() {
return 'subscriberdetails';
}
}
这是我的 child 表格
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class SubscriberAddressType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('address1', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => [
'placeholder' => 'Address 1',
'class' => 'form-control'
]])
->add('city', TextType::class, [
'label' => false,
'required' => true,
'error_bubbling' => true,
'attr' => array(
'placeholder' => 'City',
'class' => 'form-control'
)])
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\SubscriberAddress']);
}
/**
* @return string
*/
public function getName() {
return 'subscriber';
}
}
这就是我在我的 Twig 模板中调用嵌入表单的方式
<div class="form-group ">
{% for field in form.subscriberaddress %}
{{ form_label(field.city) }}
{{ form_widget(field.city) }}
{% endfor %}
</div>
当我尝试使用下面的表单获取数据时:
$firstname = $form['firstname'] ->getData();
$lastname =$form['lastname'] ->getData();
$email = $form['emailaddress'] ->getData();
$address = $form['subscriber address']['address1'] ->getData();
$city =$form['subscriber address']['city'] ->getData();
它在前 3 行以上工作正常,但是当它到达 $address = $form['subscriber address']['address1'] ->getData(); 时with 是一个嵌入式字段,symfony 会报错 child element does not exist.
我已经尝试浏览官方 symfony 食谱以及这些帖子 Post1, Post2 但其中 none 似乎回答了我的问题,即:我如何从表单中的嵌入字段中获取数据?
您的嵌入表单实际上嵌入在 collection 中(不确定这是否是您的意图)因此您需要将其视为 collection/array
如果collection是错误的
您可能想将其更改为
->add('subscriberaddress', SubscriberAddressType::class)
然后 $form->getData() 将起作用。
或者,您可以致电 $form->get('subscriberaddress')->getData()
如果你真的想要collection
如果您确实想将其用作 CollectionType
以保留 SubscriberAddressType
的多个副本,则通过
foreach ($form->get('subscriberaddress') as $subForm) {
$subData[] = $subForm->getData();
}
同时考虑将名称 subscriberaddress
更改为 subscriberAddresses
以表明它是 collection