Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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:formbuilder不';我得不到任何信息_Php_Jquery_Symfony_One To Many_Formbuilder - Fatal编程技术网

Php Symfony:formbuilder不';我得不到任何信息

Php Symfony:formbuilder不';我得不到任何信息,php,jquery,symfony,one-to-many,formbuilder,Php,Jquery,Symfony,One To Many,Formbuilder,因此,我在两个实体之间建立了OneToMany关系,并创建了与之相关的表单,但似乎FormBuilder在发送数据后没有看到实体的子实体。 父类: class Parent{ /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id;

因此,我在两个实体之间建立了
OneToMany
关系,并创建了与之相关的表单,但似乎
FormBuilder
在发送数据后没有看到实体的子实体。
父类:

class Parent{
   /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

   private $id;

   /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
   private $name;

   /**
     * @ORM\OneToMany(targetEntity="Child",mappedBy="parent",cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
   private $children;
}
class Child{
    /**
      * @var int
      *
      * @ORM\Column(name="id", type="integer")
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="AUTO")
      */
    private $id;
     /**
      * @var string
      *
      * @ORM\Column(name="name", type="string", length=255)
      */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     */
    private $parent;
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
子类:

class Parent{
   /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

   private $id;

   /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
   private $name;

   /**
     * @ORM\OneToMany(targetEntity="Child",mappedBy="parent",cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
   private $children;
}
class Child{
    /**
      * @var int
      *
      * @ORM\Column(name="id", type="integer")
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="AUTO")
      */
    private $id;
     /**
      * @var string
      *
      * @ORM\Column(name="name", type="string", length=255)
      */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     */
    private $parent;
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
这是FormTypes:

class Parent{
   /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

   private $id;

   /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
   private $name;

   /**
     * @ORM\OneToMany(targetEntity="Child",mappedBy="parent",cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
   private $children;
}
class Child{
    /**
      * @var int
      *
      * @ORM\Column(name="id", type="integer")
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="AUTO")
      */
    private $id;
     /**
      * @var string
      *
      * @ORM\Column(name="name", type="string", length=255)
      */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     */
    private $parent;
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
子表单类型:

class Parent{
   /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

   private $id;

   /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
   private $name;

   /**
     * @ORM\OneToMany(targetEntity="Child",mappedBy="parent",cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
   private $children;
}
class Child{
    /**
      * @var int
      *
      * @ORM\Column(name="id", type="integer")
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="AUTO")
      */
    private $id;
     /**
      * @var string
      *
      * @ORM\Column(name="name", type="string", length=255)
      */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     */
    private $parent;
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
之后,我在控制器内创建了如下表单:

function saveAction(Request $request){
    $parent = new Parent();
    $form = $this->createForm('Bundle\Form\ParentType', $parent);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
            //--after submitted the form I just want to display the children
            die(var_dump($parent->getChildren()));


        }
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true,
            'by_reference' => false

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')      ;

    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
当然,我正在使用jquery从symfony的
FormBuilder
提供的数据原型创建子对象,但是表单没有看到它们

我在这里遗漏了什么?

可能是因为你的“设定者”没有被调用

尝试通过引用添加
,并将其设置为
false
,如下所示:

function saveAction(Request $request){
    $parent = new Parent();
    $form = $this->createForm('Bundle\Form\ParentType', $parent);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
            //--after submitted the form I just want to display the children
            die(var_dump($parent->getChildren()));


        }
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true,
            'by_reference' => false

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')      ;

    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
我没有时间真正测试你的代码。但是,您不必将
父项
放在
子项
表单中。因此,您的子表单类型应如下所示:

function saveAction(Request $request){
    $parent = new Parent();
    $form = $this->createForm('Bundle\Form\ParentType', $parent);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
            //--after submitted the form I just want to display the children
            die(var_dump($parent->getChildren()));


        }
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true,
            'by_reference' => false

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')      ;

    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}

希望有帮助。

这可能是因为没有人调用您的“setter”

尝试通过引用添加
,并将其设置为
false
,如下所示:

function saveAction(Request $request){
    $parent = new Parent();
    $form = $this->createForm('Bundle\Form\ParentType', $parent);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
            //--after submitted the form I just want to display the children
            die(var_dump($parent->getChildren()));


        }
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true,
            'by_reference' => false

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')      ;

    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}
我没有时间真正测试你的代码。但是,您不必将
父项
放在
子项
表单中。因此,您的子表单类型应如下所示:

function saveAction(Request $request){
    $parent = new Parent();
    $form = $this->createForm('Bundle\Form\ParentType', $parent);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
            //--after submitted the form I just want to display the children
            die(var_dump($parent->getChildren()));


        }
}
class ParentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class,
            'allow_add' => true,
            'by_reference' => false

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Parent'
        ));
    }

}
class ChildType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')      ;

    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Bundle\Entity\Child'
        ));
    }
}

希望能有所帮助。

是的,将父项放入子表单类型是正确的,但将“by\u reference”设置为false仍不起作用。是的,将父项放入子表单类型是正确的,但将“by\u reference”设置为“by\u reference”设置为false仍然不起作用。您可以使用如下所示的
query\u builder
属性:您可以使用如下所示的
query\u builder
属性: