Редактирование формы Symfony 2 с пустыми зависимыми полями

У меня проблема с редактированием формы в CRUD, я использую команды для создания crud из symfony 2.8, при проверке в представлении EDIT загружаются все поля записи, которые я искал, но появляются зависимые поля другого объекта пусто (полевой груз, профессия, ролл, 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'));}

Это мой контроллер 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 integer
* /
приватный $ 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;
}

}

любой может помочь мне, пожалуйста .. 🙂

Извините … это мой ORM в 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: {  }

Это мой датрол

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 и т. Д. … являются пустыми без выбора … и снова мне нужно выбрать …
Я пытался с классом DatRol … Остальные еще нет …
Мне нужно, чтобы в полях выберите этот выбранные данные базы данных … спасибо

2

Решение

Хорошо, теперь я вижу.

Все ваши отношения однонаправлены, так как у вас есть 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 сверху и Доктрина «один ко многим», двунаправленная

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector