从帖子的回复中获取非映射数据

时间:2015-04-08 19:16:10

标签: php symfony

我的表单中有片段复选框,当我提交时,这些值不会出现在帖子的返回中。该段未映射,因为它是来自数据库的外部值。

Users.php(实体)

/**
 * Users
 *
 * @ORM\Table(name="users", indexes={@ORM\Index(name="fk_users_users_groups1_idx", columns={"users_groups_id"})})
 * @ORM\Entity
 */
class Users
{
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=45, nullable=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=45, nullable=true)
     */
    private $email;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=32, nullable=true)
     */
    private $password;

    /**
     * @var boolean
     *
     * @ORM\Column(name="active", type="boolean", nullable=true)
     */
    private $active;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime", nullable=true)
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime", nullable=true)
     */
    private $updatedAt;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var UsersGroups
     *
     * @ORM\ManyToOne(targetEntity="UsersGroups", cascade={"all"}, fetch="EAGER")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="users_groups_id", referencedColumnName="id")
     * })
     */
    private $usersGroups;

    public function __construct()
    {
        $this->usersGroups = new ArrayCollection();
    }

UsersType.php(表格)

class UsersType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text', array(
                'label' => 'Nome',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('email', 'text', array(
                'label' => 'E-mail',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('password', 'password', array(
                'label' => 'Senha',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('usersGroups', 'entity', array(
                'class' => 'Ad\SisBundle\Entity\UsersGroups',
                'label' => 'Grupo do usuário',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('active', 'checkbox', array(
                'label' => 'Ativo',
                'attr' => array(
                    'class' => 'form-control'
                )
            ))
            ->add('segments', 'entity', array(
                'class' => 'Ad\SisBundle\Entity\Segments',
                'query_builder' => function( EntityRepository $segments ) {
                    return $segments->createQueryBuilder("s");
                },
                'multiple' => true,
                'mapped' => false,
                'expanded' => true,
            ))
        ;
    }

这是帖子的结果

Users {#2011 ▼
  -name: "xxx"
  -email: "xxx@hotmail.com"
  -password: "312321"
  -active: true
  -createdAt: null
  -updatedAt: null
  -id: 1
  -usersGroups: UsersGroups {#2013 ▶}
}

我试过这个:

$segments = $editForm->get('segments')->getData();

我相信如果细分信息是用户的对象,那么处理信息会更容易。

这是正确的方法吗?如何获取分段数据?

1 个答案:

答案 0 :(得分:0)

如果未映射段,则不会将其传递给实体。 你可以从preSubmit事件订阅者的请求中获取它(看看 http://symfony.com/doc/current/components/form/form_events.html#event-subscribers)  或者,将映射更改为true,并将其传递给实体,但如果不希望持久化,则保留实体的字段而不使用ORM注释。