Reputation: 43
I have a problem making my form edit in my CRUD, I use the commands to create crud from symfony 2.8, when checking in the EDIT view, it loads all the fields of the record that I searched, but the dependent fields of another entity appear empty (field cargo, profesion, rol, departamento). I want to know how to make dependent fields appear with their respective information.
This is my DatUsuarioType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('username',TextType::class, array('attr'=>array('class'=>'form-control col-xs-10 col-sm-5', 'style' => 'margin-bottom:10px'),'label'=>'Usuario'))
->add('password',PasswordType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px')))
->add('nombre',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px')))
->add('paterno',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Apellido Paterno'))
->add('materno',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Apellido Materno'))
->add('ci',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Carnet de Identidad'))
->add('departamento',EntityType::class, array('class'=>'bdBundle:ClaDepartamento','label'=>'Departamento', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
->add('fechaNac',DateType::class, array('widget'=>'single_text', 'html5' => false, 'input' => 'datetime','label'=>'Fecha de Nacimiento','format'=>'dd/MM/yyyy', 'attr'=> ['class'=>'form-control js-datepicker', 'style' => 'margin-bottom:10px','placeholder'=>'dd/mm/yyyy', 'readonly'=>true]))
->add('telefono',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Telefono Fijo'))
->add('celular',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Telefono Celular'))
->add('email',EmailType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Correo Electronico'))
->add('rol',EntityType::class, array('class'=>'bdBundle:DatRol','label'=>'Rol de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
->add('cargoUsuario',EntityType::class, array('class'=>'bdBundle:DatCargoUsuario','label'=>'Cargo de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
->add('profesion',EntityType::class, array('class'=>'bdBundle:ClaProfesion','label'=>'Profesion de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
->add('imagen',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Foto de Perfil'))
->add('estado',ChoiceType::class, array('choices'=>array(true=> 'Habilitado'),'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Activo / Inactivo'));
}
This is my Controller DatUsuarioController
public function editAction(Request $request, DatUsuario $datUsuario)
{
$deleteForm = $this->createDeleteForm($datUsuario);
$editForm = $this->createForm('gishay\bdBundle\Form\DatUsuarioType', $datUsuario);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('usuario_edit', array('id' => $datUsuario->getId()));
}
return $this->render('datusuario/edit.html.twig', array(
'datUsuario' => $datUsuario,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
This is part of my view edit.html.twig
<div class="panel-body">
{{ form_start(edit_form) }}
{{ form_errors(edit_form) }}
<div class="form-group">
<label class="col-md-3 control-label" for="username">Usuario</label>
<div class="col-md-9">
{{ form_widget(edit_form.username, { 'attr': {'readonly': 'true'} }) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="password">Password</label>
<div class="col-md-9">
{{ form_widget(edit_form.password, { 'attr': {'readonly': 'true'} }) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="nombre">Nombre</label>
<div class="col-md-9">
{{ form_widget(edit_form.nombre) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="paterno">Apellido Paterno</label>
<div class="col-md-9">
{{ form_widget(edit_form.paterno) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="materno">Apellido Materno</label>
<div class="col-md-9">
{{ form_widget(edit_form.materno) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="ci">Carnet de Identidad</label>
<div class="col-md-9">
{{ form_widget(edit_form.ci) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="departamento">Expedido</label>
<div class="col-md-9">
{{ form_widget(edit_form.departamento) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="fechanac">Fecha de Nacimiento</label>
<div class="col-md-9">
{{ form_widget(edit_form.fechaNac) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="telefono">Telefono</label>
<div class="col-md-9">
{{ form_widget(edit_form.telefono) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="celular">Celular</label>
<div class="col-md-9">
{{ form_widget(edit_form.celular) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="email">Email</label>
<div class="col-md-9">
{{ form_widget(edit_form.email) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="rol">Rol</label>
<div class="col-md-9">
{{ form_widget(edit_form.rol) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="cargo">Cargo de Usuario</label>
<div class="col-md-9">
{{ form_widget(edit_form.cargoUsuario) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="profesion">Profesion</label>
<div class="col-md-9">
{{ form_widget(edit_form.profesion) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="imagen">Imagen</label>
<div class="col-md-9">
{{ form_widget(edit_form.imagen) }}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="estado">Activo / Inactivo</label>
<div class="col-md-9">
{{ form_widget(edit_form.estado, { 'attr': {'readonly': 'true'} }) }}
</div>
</div>
{{ form_end(edit_form) }}
</div>
this is my entity DatUsuario.php
namespace gishay\bdBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/** * DatUsuario */ class DatUsuario { /** * @var integer */ private $id;
/**
* @var string
*/
private $username;
/**
* @var string
*/
private $password;
/**
* @var string
*/
private $nombre;
/**
* @var string
*/
private $paterno;
/**
* @var string
*/
private $materno;
/**
* @var string
*/
private $ci;
/**
* @var \DateTime
*/
private $fechaNac;
/**
* @var string
*/
private $telefono;
/**
* @var string
*/
private $celular;
/**
* @var string
*/
private $email;
/**
* @var string
*/
private $imagen;
/**
* @var boolean
*/
private $estado;
/**
* @var \gishay\bdBundle\Entity\DatRol
*/
private $rol;
/**
* @var \gishay\bdBundle\Entity\ClaDepartamento
*/
private $departamento;
/**
* @var \gishay\bdBundle\Entity\DatCargoUsuario
*/
private $cargoUsuario;
/**
* @var \gishay\bdBundle\Entity\ClaProfesion
*/
private $profesion;
public function __toString()
{
return $this->getUsername();
}
public function __construct()
{
$this->DatUsuario = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set username
*
* @param string $username
* @return DatUsuario
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Get username
*
* @return string
*/
public function getUsername()
{
return $this->username;
}
/**
* Set password
*
* @param string $password
* @return DatUsuario
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Set nombre
*
* @param string $nombre
* @return DatUsuario
*/
public function setNombre($nombre)
{
$this->nombre = $nombre;
return $this;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre()
{
return $this->nombre;
}
/**
* Set paterno
*
* @param string $paterno
* @return DatUsuario
*/
public function setPaterno($paterno)
{
$this->paterno = $paterno;
return $this;
}
/**
* Get paterno
*
* @return string
*/
public function getPaterno()
{
return $this->paterno;
}
/**
* Set materno
*
* @param string $materno
* @return DatUsuario
*/
public function setMaterno($materno)
{
$this->materno = $materno;
return $this;
}
/**
* Get materno
*
* @return string
*/
public function getMaterno()
{
return $this->materno;
}
/**
* Set ci
*
* @param string $ci
* @return DatUsuario
*/
public function setCi($ci)
{
$this->ci = $ci;
return $this;
}
/**
* Get ci
*
* @return string
*/
public function getCi()
{
return $this->ci;
}
/**
* Set fechaNac
*
* @param \DateTime $fechaNac
* @return DatUsuario
*/
public function setFechaNac($fechaNac)
{
$this->fechaNac = $fechaNac;
return $this;
}
/**
* Get fechaNac
*
* @return \DateTime
*/
public function getFechaNac()
{
return $this->fechaNac;
}
/**
* Set telefono
*
* @param string $telefono
* @return DatUsuario
*/
public function setTelefono($telefono)
{
$this->telefono = $telefono;
return $this;
}
/**
* Get telefono
*
* @return string
*/
public function getTelefono()
{
return $this->telefono;
}
/**
* Set celular
*
* @param string $celular
* @return DatUsuario
*/
public function setCelular($celular)
{
$this->celular = $celular;
return $this;
}
/**
* Get celular
*
* @return string
*/
public function getCelular()
{
return $this->celular;
}
/**
* Set email
*
* @param string $email
* @return DatUsuario
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Set imagen
*
* @param string $imagen
* @return DatUsuario
*/
public function setImagen($imagen)
{
$this->imagen = $imagen;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getImagen()
{
return $this->imagen;
}
/**
* Set estado
*
* @param boolean $estado
* @return DatUsuario
*/
public function setEstado($estado)
{
$this->estado = $estado;
return $this;
}
/**
* Get estado
*
* @return boolean
*/
public function getEstado()
{
return $this->estado;
}
/**
* Set rol
*
* @param \gishay\bdBundle\Entity\DatRol $rol
* @return DatUsuario
*/
public function setRol(\gishay\bdBundle\Entity\DatRol $rol = null)
{
$this->rol = $rol;
return $this;
}
/**
* Get rol
*
* @return \gishay\bdBundle\Entity\DatRol
*/
public function getRol()
{
return $this->rol;
}
/**
* Set departamento
*
* @param \gishay\bdBundle\Entity\ClaDepartamento $departamento
* @return DatUsuario
*/
public function setDepartamento(\gishay\bdBundle\Entity\ClaDepartamento $departamento = null)
{
$this->departamento = $departamento;
return $this;
}
/**
* Get departamento
*
* @return \gishay\bdBundle\Entity\ClaDepartamento
*/
public function getDepartamento()
{
return $this->departamento;
}
/**
* Set cargoUsuario
*
* @param \gishay\bdBundle\Entity\DatCargoUsuario $cargoUsuario
* @return DatUsuario
*/
public function setCargoUsuario(\gishay\bdBundle\Entity\DatCargoUsuario $cargoUsuario = null)
{
$this->cargoUsuario = $cargoUsuario;
return $this;
}
/**
* Get cargoUsuario
*
* @return \gishay\bdBundle\Entity\DatCargoUsuario
*/
public function getCargoUsuario()
{
return $this->cargoUsuario;
}
/**
* Set profesion
*
* @param \gishay\bdBundle\Entity\ClaProfesion $profesion
* @return DatUsuario
*/
public function setProfesion(\gishay\bdBundle\Entity\ClaProfesion $profesion = null)
{
$this->profesion = $profesion;
return $this;
}
/**
* Get profesion
*
* @return \gishay\bdBundle\Entity\ClaProfesion
*/
public function getProfesion()
{
return $this->profesion;
}
}
anyone can help me please.. :)
Sry... this is my ORM in YML DatUsuario
gishay\bdBundle\Entity\DatUsuario:
type: entity
table: dat_usuario
indexes:
dat_usuario_FKIndex1:
columns:
- rol_id
dat_usuario_FKIndex2:
columns:
- departamento_id
dat_usuario_FKIndex3:
columns:
- cargo_usuario_id
dat_usuario_FKIndex4:
columns:
- profesion_id
id:
id:
type: integer
nullable: false
unsigned: true
id: true
generator:
strategy: IDENTITY
fields:
username:
type: string
nullable: false
length: 25
fixed: false
password:
type: string
nullable: false
length: 255
fixed: false
nombre:
type: string
nullable: false
length: 45
fixed: false
paterno:
type: string
nullable: true
length: 45
fixed: false
materno:
type: string
nullable: true
length: 45
fixed: false
ci:
type: string
nullable: false
length: 15
fixed: false
fechaNac:
type: date
nullable: true
column: fecha_nac
telefono:
type: string
nullable: true
length: 10
fixed: false
celular:
type: string
nullable: true
length: 10
fixed: false
email:
type: string
nullable: true
length: 45
fixed: false
imagen:
type: string
nullable: true
length: 100
fixed: false
estado:
type: boolean
nullable: true
manyToOne:
rol:
targetEntity: DatRol
inversedBy: DatUsuario
joinColumns:
rol_id:
referencedColumnName: id
orphanRemoval: false
departamento:
targetEntity: ClaDepartamento
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
departamento_id:
referencedColumnName: id
orphanRemoval: false
cargoUsuario:
targetEntity: DatCargoUsuario
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
cargo_usuario_id:
referencedColumnName: id
orphanRemoval: false
profesion:
targetEntity: ClaProfesion
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
profesion_id:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
This is my DatRol
gishay\bdBundle\Entity\DatRol:
type: entity
table: dat_rol
id:
id:
type: integer
nullable: false
unsigned: true
id: true
generator:
strategy: IDENTITY
fields:
rol:
type: string
nullable: false
length: 50
fixed: false
abreviacion:
type: string
nullable: true
length: 50
fixed: false
estado:
type: boolean
nullable: true
oneToMany:
DatUsuario:
targetEntity: DatUsuario
mappedBy: rol
fetch: EXTRA_LAZY
lifecycleCallbacks: { }
Thanks for answering again,... but in my edit form continues fields Rol, Profesion, etc... are empty whitout selection... and again i need select ... I tried with Class DatRol... The others are not yet... I need that in the fields select this selected the data of the database... thanx
Upvotes: 2
Views: 456
Reputation: 3115
Ok, now I see.
All your relations are unidirectional, since you have mappedBy: null
and inversedBy: null
That's why symfony thinks you'll setup relations manualy like
// manual relations
$datUsuario->setRol( $yourRoleEntity );
$datUsuario->setDepartamento( $yourRoleEntity );
// and so on..
// but I think you don't want that....
// form
$editForm = $this->createForm('gishay\bdBundle\Form\DatUsuarioType', $datUsuario);
what is also possible - you just don't have any records in your DatRol
, ClaDepartamento
, DatCargoUsuario
tables yet. That's why dropdown-list are empty... If that's the case, add some data first!
But, back to your relations...
As you can see you should declare
manyToOne:
rol:
targetEntity: DatRol
cascade: { 'persist' } # Play around with other settings...
#remove this since it's incorret. you can't have both!
#mappedBy: null
inversedBy: datUsario
joinColumns:
rol_id:
referencedColumnName: id
orphanRemoval: false
# do the same for all others manyToOne relations
When it's done, go to your DatRol
, ClaDepartamento
, DatCargoUsuario
and ClaProfesion
and edit your oneToMany
relations. Remove inversedBy
and ADD mapeedBy
like:
oneToMany:
datUsario:
targetEntity: DatUsuario
mappedBy: rol
fetch: EXTRA_LAZY
do the same in all others...
Rule-Of-Thumb:
inversedBy
is always on the side where FOREIGN KEY is (manyToMany
is exception, see ormcheatsheet for more details)mappedBy
on the other sideFor More info check the ormcheatsheet from above and Doctrine's One-To-Many, Bidirectional
Upvotes: 1