我在我的CRUD中进行表单编辑时遇到问题,我使用命令从symfony 2.8创建crud,当在EDIT视图中检查时,它会加载我搜索的记录的所有字段,但依赖字段另一个实体看起来是空的(现场货物,专业,rol,departamento)。我想知道如何使依赖字段显示各自的信息。
这是我的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'));
}
这是我的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(),
));
}
这是我的观点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>
这是我的实体DatUsuario.php
namespace gishay\bdBundle\Entity;
将Doctrine \ ORM \ Mapping用作ORM;
/ ** * DatUsuario * / 类DatUsuario { / ** * @var整数 * / 私人$ 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;
}
}
任何人都可以帮助我.. :)
Sry ......这是我在YML DatUsuario中的ORM
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: { }
这是我的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: { }
感谢您再次回答,...但在我的编辑表单中继续字段Rol,Profesion等...是空白选择...再次我需要选择... 我尝试使用Class DatRol ......其他人还没有...... 我需要在字段中选择此选择数据库的数据... thanx
答案 0 :(得分:1)
好的,现在我明白了。
您的所有关系都是单向的,因为您有mappedBy: null
和inversedBy: null
这就是为什么symfony认为你会像
// 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);
还有可能 - 您还没有在DatRol
,ClaDepartamento
,DatCargoUsuario
表格中找到任何记录。这就是为什么下拉列表是空的......如果是这样的话,先添加一些数据!
但是,回到你们的关系......
如您所见,您应该声明
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
完成后,请转到DatRol
,ClaDepartamento
,DatCargoUsuario
和ClaProfesion
,然后修改oneToMany
关系。删除inversedBy
和添加mapeedBy
像:
oneToMany:
datUsario:
targetEntity: DatUsuario
mappedBy: rol
fetch: EXTRA_LAZY
在所有其他人中也这样做......
<强>原则进行的拇指:强>
inversedBy
始终位于FOREIGN KEY所在的一侧(manyToMany
是例外,有关详细信息,请参阅ormcheatsheet)mappedBy
在另一边如需更多信息,请查看上方的ormcheatsheet和Doctrine's One-To-Many, Bidirectional