Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问嵌入式表单数据symfony_Php_Symfony_Doctrine Orm_Symfony Forms - Fatal编程技术网

Php 访问嵌入式表单数据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\

我正在使用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';
    }
}
这是我的孩子表格

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。我今天将尝试它,并将用结果更新此线程!刚刚尝试了这个解决方案,它对我有效!非常感谢您提供的解决方案以及详细的解释。