嵌入具有关系的表单 Symfony2

Embed forms with relations Symfony2

我的问题是我正在尝试嵌入表单,但我做不到,而且我阅读了 symfony 书籍和其他页面,但我无法工作。

这是我的 DatosType:

    <?php

namespace Proyecto\LavocBundle\Form;

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

class DatosType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('empresa');
        $builder->add('cuit');
        $builder->add('localidad');
        $builder->add('calle');
        $builder->add('altura');
        $builder->add('areaTel');
        $builder->add('telefono');
        $builder->add('areaCel');
        $builder->add('celular');
        $builder->add('email');
    }

    public function getName()
    {
    return 'datos_form';
    }

}

这是我的用户类型:

    <?php

namespace Proyecto\LavocBundle\Form;

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

class UserType extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('usuario');
        $builder->add('pass');
    }

    public function getName() 
    {
        return 'user_form';
    }
}

这是我的 RegistroUsuarioType:

<?php

namespace Proyecto\LavocBundle\Form;

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



class RegistroUsuarioType extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);

        $builder->add('usuario');
        $builder->add('pass');
        $builder->add('datos', new DatosType(), array('by_reference' => true));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\LavocBundle\Entity\User'
        ));
    }

    public function getName() {
        return 'RegistroUsuario_form';
    }
}

我的实体数据:

 <?php

namespace Proyecto\LavocBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Datos
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Proyecto\LavocBundle\Entity\DatosRepository")
 */
class Datos
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var integer
     *
     * @ORM\Column(name="cuit", type="integer")
     */
    private $cuit;

    /**
     * @var string
     *
     * @ORM\Column(name="localidad", type="string", length=50)
     */

    private $localidad;

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

    /**
     * @var integer
     *
     * @ORM\Column(name="altura", type="integer")
     */
    private $altura;

    /**
     * @var integer
     *
     * @ORM\Column(name="areaTel", type="integer")
     */
    private $areaTel;

    /**
     * @var integer
     *
     * @ORM\Column(name="telefono", type="integer")
     */
    private $telefono;

    /**
     * @var integer
     *
     * @ORM\Column(name="areaCel", type="integer")
     */
    private $areaCel;

    /**
     * @var integer
     *
     * @ORM\Column(name="celular", type="integer")
     */
    private $celular;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string")
     */

    private $email;

    /**
    * @ORM\OneToOne(targetEntity="User", inversedBy="datos")
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
    */

    private $personales;

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

    /**
     * Set empresa
     *
     * @param string $empresa
     * @return Datos
     */
    public function setEmpresa($empresa)
    {
        $this->empresa = $empresa;

        return $this;
    }

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

    /**
     * Set cuit
     *
     * @param integer $cuit
     * @return Datos
     */
    public function setCuit($cuit)
    {
        $this->cuit = $cuit;

        return $this;
    }

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

    /**
     * Set localidad
     *
     * @param string $localidad
     * @return Datos
     */
    public function setLocalidad($localidad)
    {
        $this->localidad = $localidad;

        return $this;
    }

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

    /**
     * Set calle
     *
     * @param string $calle
     * @return Datos
     */
    public function setCalle($calle)
    {
        $this->calle = $calle;

        return $this;
    }

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

    /**
     * Set altura
     *
     * @param integer $altura
     * @return Datos
     */
    public function setAltura($altura)
    {
        $this->altura = $altura;

        return $this;
    }

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

    /**
     * Set telefono
     *
     * @param integer $telefono
     * @return Datos
     */
    public function setTelefono($telefono)
    {
        $this->telefono = $telefono;

        return $this;
    }

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

    /**
     * Set area
     *
     * @param integer $area
     * @return Datos
     */
    public function setAreaTel($areaTel)
    {
        $this->areaTel = $areaTel;

        return $this;
    }

    /**
     * Get area
     *
     * @return integer 
     */
    public function getAreaTel()
    {
        return $this->areaTel;
    }

    /**
     * Set celular
     *
     * @param integer $celular
     * @return Datos
     */
    public function setCelular($celular)
    {
        $this->celular = $celular;

        return $this;
    }

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

    /**
     * Set areaCel
     *
     * @param integer $areaCel
     * @return Datos
     */
    public function setAreaCel($areaCel)
    {
        $this->areaCel = $areaCel;

        return $this;
    }

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

    /**
     * Set email
     *
     * @param integer $email
     * @return Datos
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

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

    /**
     * Set personales
     *
     * @param string $personales
     * @return Datos
     */

    public function setPersonales($personales)
    {
        $this->personales = $personales;
        return $this;

    }

    /**
     * Get personales
     *
     * @return string
     */

    public function getPersonales()
    {
        return $this->personales;
    }


}

我的实体用户:

 <?php

namespace Proyecto\LavocBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Proyecto\LavocBundle\Entity\UserRepository")
 */
class User {

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

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

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

    /**
     * @ORM\OneToMany(targetEntity="Pedido", mappedBy="user")
     */
    private $pedidos;

    /**
     *  @ORM\OneToOne(targetEntity="Datos", mappedBy="personales")
     */

    private $datos;

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

    /**
     * Set usuario
     *
     * @param string $usuario
     * @return User
     */
    public function setUsuario($usuario) {
        $this->usuario = $usuario;

        return $this;
    }

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

    /**
     * Set pass
     *
     * @param string $pass
     * @return User
     */
    public function setPass($pass) {
        $this->pass = $pass;

        return $this;
    }

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

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

    /**
     * Set pedidos
     *
     * @param string $pedidos
     * @return User
     */
    public function setPedido($pedidos) {
        $this->pedidos = $pedidos;
        return $this;
    }

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

    /**
     * Add pedidos
     *
     * @param \UTN\GuardaBundle\Entity\Pedido $pedidos
     * @return User
     */
    public function addPedido(\Proyecto\LavocBundle\Entity\Pedido $pedidos) {
        $this->pedidos[] = $pedidos;
        return $this;
    }

    /**
     * Remove pedidos
     *
     * @param \UTN\GuardaBundle\Entity\Pedido $pedidos
     */
    public function removePedido(\Proyecto\LavocBundle\Entity\Pedido $pedidos) {
        $this->pedidos->removeElement($pedidos);
    }

    /**
     * Get datos
     *
     * @return string
     */

    public function getDatos()
    {
        return $this->datos;
    }

    /**
     * Set datos
     *
     * @param string $datos
     * @return User
     */

    public function setDatos($datos)
    {
        $this->datos = $datos;
        return $this;
    }




}

最后,我的 crearUsuarioDatosAction:

  public function crearUsuarioDatosAction()
    {
        $usuario = new User();
        $datos = new Datos();
        $usuario->setDatos($datos);
        $request = $this->getRequest();
        $form = $this->createForm(new RegistroUsuarioType(), $usuario);

        return $this->render('AtajoBundle:IngresarValores:crearUsuarioDatos.html.twig', array('form' => $form->createView()));

    }

我有几个问题想请教: 1) 我得到的错误如下: Entities passed to the choice field must be managed 。也许坚持他们在实体经理?那有什么不对? 2) 如何获取用户通过 post 发送后的数据?因为例如,用户和密码我必须保留 table 用户和个人数据,如地址、电话 phone 号码、手机 phone 号码等,我必须保留在 table 数据

感谢大家!!!

add() 函数的第二个参数必须提供表单字段类型,如果要使用默认值,则为 null。

$builder->add('datos', null, array('by_reference' => true));