Symfony 2表格编辑使用空的依赖字段



我有一个问题,使我的表单编辑在我的crud中,我使用命令从symfony 2.8创建crud,在检查编辑视图时,它加载了记录的所有字段我搜索了,但是另一个实体的依赖字段出现空白(现场货物,专业,ROL,Dectionamento(。我想知道如何通过各自的信息出现依赖性字段。

这是我的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('gishaybdBundleFormDatUsuarioType', $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 gishaybdBundleEntity;

使用Doctrine orm 映射为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 gishaybdBundleEntityDatRol
 */
private $rol;
/**
 * @var gishaybdBundleEntityClaDepartamento
 */
private $departamento;
/**
 * @var gishaybdBundleEntityDatCargoUsuario
 */
private $cargoUsuario;
/**
 * @var gishaybdBundleEntityClaProfesion
 */
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 gishaybdBundleEntityDatRol $rol
 * @return DatUsuario
 */
public function setRol(gishaybdBundleEntityDatRol $rol = null)
{
    $this->rol = $rol;
    return $this;
}
/**
 * Get rol
 *
 * @return gishaybdBundleEntityDatRol 
 */
public function getRol()
{
    return $this->rol;
}
/**
 * Set departamento
 *
 * @param gishaybdBundleEntityClaDepartamento $departamento
 * @return DatUsuario
 */
public function setDepartamento(gishaybdBundleEntityClaDepartamento $departamento = null)
{
    $this->departamento = $departamento;
    return $this;
}
/**
 * Get departamento
 *
 * @return gishaybdBundleEntityClaDepartamento 
 */
public function getDepartamento()
{
    return $this->departamento;
}
/**
 * Set cargoUsuario
 *
 * @param gishaybdBundleEntityDatCargoUsuario $cargoUsuario
 * @return DatUsuario
 */
public function setCargoUsuario(gishaybdBundleEntityDatCargoUsuario $cargoUsuario = null)
{
    $this->cargoUsuario = $cargoUsuario;
    return $this;
}
/**
 * Get cargoUsuario
 *
 * @return gishaybdBundleEntityDatCargoUsuario 
 */
public function getCargoUsuario()
{
    return $this->cargoUsuario;
}
/**
 * Set profesion
 *
 * @param gishaybdBundleEntityClaProfesion $profesion
 * @return DatUsuario
 */
public function setProfesion(gishaybdBundleEntityClaProfesion $profesion = null)
{
    $this->profesion = $profesion;
    return $this;
}
/**
 * Get profesion
 *
 * @return gishaybdBundleEntityClaProfesion 
 */
public function getProfesion()
{
    return $this->profesion;
}

}

任何人都可以帮我..:(

sry ...这是我在yml datusuario中的ORM

gishaybdBundleEntityDatUsuario:
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

gishaybdBundleEntityDatRol:
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上课...其他人还没有...我需要在字段中选择此选择数据库的数据... thanx

好的,现在我知道了。

您的所有关系都是单向的,因为您有mappedBy: nullinversedBy: null这就是为什么Symfony认为您会设置Manualy,例如

// manual relations
$datUsuario->setRol( $yourRoleEntity );
$datUsuario->setDepartamento( $yourRoleEntity );
// and so on..
// but I think you don't want that....
// form
$editForm = $this->createForm('gishaybdBundleFormDatUsuarioType', $datUsuario);

也可能发生的事情 - 您只是在DatRolClaDepartamentoDatCargoUsuario表中没有任何记录。这就是为什么下拉列表为空的原因...如果是这样,请先添加一些数据!

但是,回到您的关系...

检查这个很好的参考

您可以看到,您应该声明

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

完成后,转到您的DatRolClaDepartamentoDatCargoUsuarioClaProfesion,然后编辑您的oneToMany关系。删除inversedBy并添加mapeedBy

喜欢:

oneToMany:
    datUsario: 
        targetEntity: DatUsuario
        mappedBy: rol
        fetch: EXTRA_LAZY

在所有其他方面都做同样的事情...

thumb规则:

  • inversedBy始终在外键所在的一边(manyToMany是例外,有关更多详细信息,请参见ormcheatsheat(
  • mappedBy在另一侧

有关更多信息,请查看上面的ORMCHEATSHEET,以及Doctrine的一对多,双向

最新更新