Php 访问嵌入式表单数据symfony
我正在使用symfony中的嵌入式表单,无法从嵌入式表单获取数据 这是我的专利表Php 访问嵌入式表单数据symfony,php,symfony,doctrine-orm,symfony-forms,Php,Symfony,Doctrine Orm,Symfony Forms,我正在使用symfony中的嵌入式表单,无法从嵌入式表单获取数据 这是我的专利表 namespace AppBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\
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';
}
}
这是我的孩子表格
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';
}
}
这就是我在我的小树枝模板中调用嵌入表单的方式
<div class="form-group ">
{% for field in form.subscriberaddress %}
{{ form_label(field.city) }}
{{ form_widget(field.city) }}
{% endfor %}
</div>
对于上面的前3行,它可以正常工作,但是当它到达$address=$form['subscriber address']['address1']->getData()时;如果是嵌入式字段,则symfony会发出错误,因为子元素不存在
我试过浏览官方的symfony食谱以及这些帖子
,但这些似乎都不能回答我的问题,即:如何从表单中的嵌入字段获取数据?您的嵌入表单实际上嵌入到集合中(不确定这是否是您的意图),因此您需要将其视为集合/数组 如果收款有误 你可能想把它改成
->add('subscriberaddress', SubscriberAddressType::class)
然后$form->getData()就可以了。
或者,您可以调用$form->get('subscriberaddress')->getData()
如果你真的想收集
如果您确实想将其用作CollectionType
来保存SubscriberAddressType
的多个副本,则通过
foreach ($form->get('subscriberaddress') as $subForm) {
$subData[] = $subForm->getData();
}
也考虑更改名称<代码>订阅地址>代码>代码>订阅地址< /代码>以指示它是集合
< p>您的嵌入表单实际上嵌入在集合中(不确定这是否是您的意图),因此您需要将其视为集合/数组 如果收款有误 你可能想把它改成->add('subscriberaddress', SubscriberAddressType::class)
然后$form->getData()就可以了。
或者,您可以调用$form->get('subscriberaddress')->getData()
如果你真的想收集
如果您确实想将其用作CollectionType
来保存SubscriberAddressType
的多个副本,则通过
foreach ($form->get('subscriberaddress') as $subForm) {
$subData[] = $subForm->getData();
}
也考虑更改名称<代码>订阅地址>代码> <代码>订阅地址>代码>以指示它是集合
谢谢Kondar。我今天将尝试它,并将用结果更新此线程!刚刚尝试了这个解决方案,它对我有效!非常感谢您提供的解决方案以及详细的解释。非常感谢Kondar。我今天将尝试它,并将用结果更新此线程!刚刚尝试了这个解决方案,它对我有效!非常感谢您提供的解决方案以及详细的解释。