Php Symfony2.3多对多形式

Php Symfony2.3多对多形式,php,forms,symfony,many-to-many,Php,Forms,Symfony,Many To Many,我有一些问题让多对多的人在我的表格上工作 我的表格如下所示: 用户(FOSUserBundle) 成员(自定义类) 区域(自定义类) 成员窗体是用户窗体的子窗体,区域窗体是成员窗体的子窗体 首先,我得到的错误是: 属性“region”或方法“setRegion()”、“\u set()”或“\u call()”都不存在,并且在类“Netsite\Bundle\AdminBundle\Entity\Member”中都没有公共访问权限 当我提交表单时,它会点击: $form->handleRe

我有一些问题让多对多的人在我的表格上工作

我的表格如下所示:

用户(FOSUserBundle)
成员(自定义类)
区域(自定义类)

成员窗体是用户窗体的子窗体,区域窗体是成员窗体的子窗体

首先,我得到的错误是:

属性“region”或方法“setRegion()”、“\u set()”或“\u call()”都不存在,并且在类“Netsite\Bundle\AdminBundle\Entity\Member”中都没有公共访问权限

当我提交表单时,它会点击:

$form->handleRequest($request);
以下是所有相关代码:

Member.orm.yml

Netsite\Bundle\AdminBundle\Entity\Member:
type:  entity
table: member
id:
    id:
        type: integer
        generator:
            strategy: AUTO
fields:
    security_question:
        type: string
        length: 255
    security_answer:
        type: string
        length: 255
----- SNIP -----
manyToMany:
    region:
        targetEntity: Region
        cascade: ["persist", "remove"]
Entity\Member.php

Entity\Region.php

<?php

namespace Netsite\Bundle\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Region
 */
class Region
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $region;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set region
     *
     * @param string $region
     * @return Region
     */
    public function setRegion($region)
    {
        $this->region = $region;

        return $this;
    }

    /**
     * Get region
     *
     * @return string 
     */
    public function getRegion()
    {
        return $this->region;
    }
}

我想您应该在MemberType.php中替换:

$builder->add('region', new RegionType())

这将呈现一个带有标记为Region::Region的复选框的区域(顺便说一句,混淆的命名方案应该只是“名称”)。多个复选标记将通过多个M2M条目反映出来

Netsite\Bundle\AdminBundle\Entity\Region:
type:  entity
table: region
id:
    id:
        type: integer
        generator:
            strategy: AUTO
fields:
    region:
        type: string
        length: 255
<?php

namespace Netsite\Bundle\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Region
 */
class Region
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $region;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set region
     *
     * @param string $region
     * @return Region
     */
    public function setRegion($region)
    {
        $this->region = $region;

        return $this;
    }

    /**
     * Get region
     *
     * @return string 
     */
    public function getRegion()
    {
        return $this->region;
    }
}
<?php
namespace Netsite\Bundle\AdminBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class RegionType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('region', 'entity', array(
                'class' => 'Netsite\Bundle\AdminBundle\Entity\Region',
                'property' => 'region',
                'empty_data' => null,
                'multiple' => true,
                'expanded' => true,
                'required' => false,
                'label' => false
             ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'Netsite\Bundle\AdminBundle\Entity\Region',
            'cascade_validation' => true
        ));
    }

    public function getName() {
        return 'RegionType';
    }
}
$builder->add('region', new RegionType())
$builder->add('region', 'entity',
              array(
                  'class' => 'YourBundle:Region',
                  'multiple' => true,
                  'expanded' => true,
                  'required' => true|false,
                  'property' => 'region',
                  'label' => 'your.label',
                  'error_bubbling' => true,
              )
)