2012-03-01 10 views
9

Me pregunto si es posible crear un formulario usando una entidad para obtener todos los campos, en una relación de uno a uno. Para aclarar:Crear automáticamente un formulario usando entidad (relación uno a uno)

Tengo una entidad User.php (con todos los campos obvios, nombre, apellido, género, etc.) y una entidad Address.php. Lo que quiero es construir todo el formulario sin agregar una por una las propiedades de la entidad Address y guardarla con la relación adecuada en la base de datos.

Esto es lo que he tratado (que he Trimed el código un poco), pero obviamente no es la forma correcta:

entidad Usuario:

class User implements UserInterface { 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


/** 
* @ORM\Column(type="string", length=100, nullable=TRUE) 
*/ 
protected $firstName; 

/** 
* @ORM\Column(type="string", length=200) 
* @Assert\NotBlank() 
*/ 
protected $lastNames; 

/** 
* @ORM\OneToOne(targetEntity="Capsa\Bundle\ClubCommonBundle\Entity\Address") 
*/ 
protected $address; 

clase Dirección

class Address { 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", length=100, unique=TRUE) 
* @Assert\NotBlank() 
*/ 
protected $streetName; 

/** 
* @ORM\Column(type="string", length=50) 
*/ 
protected $streetNumber; 

creador de formularios:

public function buildForm(FormBuilder $builder, array $options) { 
    $builder->add('login', 'text') 
      ->add('password', 'password') 
      ->add('firstName', 'text', array("required" => FALSE)) 
      ->add('lastNames', 'text') 
      ->add('address', 'entity', array(
       'class' => 'CapsaClubCommonBundle:Address', 
       'property'=>'streetName' 
      )); 
} 

Eso solo obtiene el campo streetName de la tabla y lo pone en una lista.

Respuesta

0

Intente utilizar Collection form type en lugar del tipo de campo Entidad - consulte this tutorial.

+19

finalmente utilicé solo esto para cargar todo el objeto: '-> add ('address', new AddressType());' por supuesto, defyining AddressType – Manu

+3

@Manu tu comentario es realmente la respuesta - al menos el que trabajó para mi. Gracias. –

+2

A continuación, el comentario de Manu aquí es la sintaxis más nueva: '' '-> add ('address', AddressType :: class)' '' – 0x1gene

Cuestiones relacionadas